文章目录
@Configuration
在类上添加,相当于告诉容器这是一个配置类
而配置类本身也为容器的一个注册组件
@Configuration(proxyBeanMethods = true)
默认为true,意味代理对象功能开启,每次使用容器中的组件时,都会检查容器中是否已经注册过该组件,保持组件的单实例。外部无论对配置类中的这个组件注册方法调用多少次,获取的都是之前注册容器中的但实例对象。
@Configuration(proxyBeanMethods = flase)
当为false时,配置类就会跳过检查,当通过配置类拿组件时,组件是各自创建的,不为单实例。优点是SpringBoot加载速度快
以此可以分出两个Configration配置,一个是Full(重量级配置),一个是Lift(轻量级配置)
每当我们创建一个Configration代理配置类的时候可以选择这两种模式,若proxyBeanMethods为true,则在配置类中的组件均为单实例,相互依赖,若为false,则每次创建组件时都会new一个新的对象
@Bean
给容器中添加组件,以方法名作为主键的Id,放回类型为组件的类型,返回的值就是组件在容器中的实例。
图中已将配置类中的组件注册到了容器中
注意:注册的组件为单实例。
测试:
@Condotional
当满足某些条件之后,才进行组件的注入
举例说明:@ConditionalOnBean:当容器中有指定Bean存在时,配置该注解的Bean组件才能成功注册
这种情况下,@ConditionalOnBean指定了tom01组件,而tom01组件并没有注册倒容器中,所以user01也无法注册到容器中。
因此这两个查询结果均为false。
@ImportResource
可以将以xml文件注册组件的方式以配置类的形式生效。
若单单只配置xml,这些组件无法正常注册。
只需在配置类中加上@ImportResource(“classpath:beans.xml”)即可
@ConfigrationProperties
这个注解要先将类放倒容器中注册组件,搭配使用 @Component
当使用的变量的值经常需要改变时,使用该注解,将值注入到JavaBean中。如配置JDBC参数(url,username,password)时,创建一个JDBC类,创建与参数名完全对应的属性名。
比如我在property文件中配置了mycar的属性和属性值。
在Car类上添加注解@ConfigrationProperties(prefix=“mycar”),这就和配置文件中的mycar对应了起来(***属性值一定要相互对应,完全一样)
我们再从容器中取出car组件,看看属性的值是否已经按照配置文件中的形式添加。
结果对应的上,说明成功将配置文件中的只添加到了对应的JavaBean中
@EnableConfigurationProperties
1.开启属性配置绑定功能
2.将指定的类自动注册容器中
这个注解相比起@ConfigrationProperties注解,少了一个@Component注解,但是@ConfigrationProperties依然要添加在指定的类中,不然无法与properties文件中的值相互对应