Bean注解
Springboot中默认扫描启动类所在的包及其子包。
比如这里的DemoApplication是启动类,那么spring boot默认扫描com.example.demo这个包。
Controller、Service、Repository这三个注解是Component的衍生注解,它们经常会被添加到Controller层、Service层以及DAO层的类上,从而让代码的可读性更高。
如果要注册的bean对象来自第三方,不是自定义的,无法用@Component 及衍生注解声明bean的。应该用@Bean和@Import。
@Bean
@Bean 注解的作用就是告诉Spring IOC容器,下面定义的这个对象是一个容器。
对象默认的名字是方法名。
运行启动类输出的对象的名字可以获取到。
如果不想用方法名,要改对象的名字也可以,就设置别名。在@Bean后面加上括号,括号里面的字符串的内容就是别名。比如这里的方法名是"province",不想用这个,而是用"aa"。
那么就把下面框中的getBean(“province”)换成getBean(“aa”),再运行启动类输出对象的名字也一样。不过一般都是用默认的对象名也就是方法名。
@Import
@Import
- 导入 配置类
- 导入 Importselector 接口实现类
比如导入CommonConfig类
如果要导入的类很多,就得再@Import()中写很多个,就不美观。我们就用导入 Importselector 接实现类,这样启动类上就写这个接口的实现类CommonlmportSelector的class。
这样当springboot工程启动后,就先扫描import,然后去找到这个CommonlmportSelector实现类,自动执行selectlmports方法,得到这些类名,把这些类名对应的对象注入到IOC容器中。
SpringBoot还提供了设置注册生效条件的注解 @Conditional
@ConditionalOnProperty
比如这里@ConditionalOnProperty(prefix = "country",name = {"name","system"})。如果配置文件中配置了country.name和country.system,则注入。否则不注入。
我们先使配置文件中没有配置country.name和country.system。这里注释掉了也就是相当于没有配置。
我们去启动类中运行。看是否能获取Country对象。
报错,显示
No qualifying bean of type 'cn.itcast.pojo.Country'available
说明这个country对象我们并没有声明,它找不到,也就是我们设置的条件生效了。
我们再把配置文件中的注释去掉,也就是配置了country.name和country.system,那么理论上就可以注入这个对象到IOC容器中,那么就可以在启动类中获取到。
我们再去运行启动类,发现可以获取了。
以上就是@ConditionalOnProperty注解。
@ConditionalOnMissingBean与@ConditionalOnProperty相反。
希望这篇文章能帮助到你^_^加油加油