1、配置编写的Bean组件添加到容器中。
方法:先准备两个JavaBean,在方法上标注@Bean注解即可(默认单实例组件)。在启动程序中打印IOC容器所有的组件名称,可以在控制台查看结果
2、本身配置类也是IOC容器中的组件,默认也是单实例。
配置在@Configuration(proxyBeanMethod = true),如果配置为true则IOC容器中的配置类组件是一个被增强了的代理对象
而如果为false,则不是单实例对象。
这个配置为true是应用在组件依赖的场景,会先去找容器中有没有宠物组件,有就自动给人传这个宠物。
3、配置组件到容器中,除了上面的方法,还可以使用注解@Import
在主程序获取组件名称并打印到控制台
4、条件装配:满足指定条件才进行组件注入
@Conditional以及派生注解如图:每个注解都代表了不同的功能
当容器中有这个组件时,才。。 @ConditionalOnBean
当容器中没有这个组件时, @ConditionalOnMissingBean
当容器中有这个类时, @ConditionalOnClass
当容器中没有这个类时, @ConditionalOnMissingClass
当类路径中存在某个资源时, @ConditionalOnResource
当是制定的Java版本号的时, @ConditionalOnJava
当应用是一个Web应用的时, @ConditionalOnWebApplication
当应用不是一个Web应用时, @ConditionalOnNotWebApplication
当容器中指定的组件只有一个实例,或者多个实例下只有一个主实例@Primary标注, @ConditionalOnSingleCandidate
当配置文件中配置了某个属性时, @ConditionalOnProperity
在Intellij中如何打开这个注解的继承树,首先搜索注解
条件装配示例1:
~在配置类中将Bean对象注入注释
~在主程序中打印tom组件是否在容器中这个条件,返回的值为false
最终期望的效果是:当user依赖pet的情况下,去判断如果容器中没有这个宠物,那么容器也不要去注册用户了。
也可以配置在类上,当容器中存在tom组件时,这个类中的代码才会生效
示例2:当容器中不存在某个组件时,才去装配其他组件
5、如果公司使用的时beans.xml,那么我们怎么转换为注解配置的方式?SpringBoot并不会自动去识别beans.xml文件和把组件放到容器中。
解决:在配置文件中导入Spring配置文件beans.xml
@ImportResource("classpath:beans.xml")//导入Spring的配置文件