SpringBoot2自动配置2

 

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的配置文件

 

posted @ 2021-02-24 18:02  拥抱天空  阅读(72)  评论(0编辑  收藏  举报