我们先来看看,以前我们用spring是怎么配置bean的属性值:
虽然不算多,但是如果每一个bean都这样配置,属实不容易。这个时候我们的@Configuration来了,看他是怎么进行配置bean的:
直接在类上加上@Configuration注解,告诉SpringBoot,我们Myconfig是个配置类哈!然后我们只需要创建方法返回一个对象,再在方法上添加@Bean注解将它交给容器来注册。如果我们以后要获取Bean对象,只需要调用这个方法就行了,不过需要注意的是它默认的就是单例的,这和spring一样,如果我们想要它成为多例需要设置一下@Configuration注解里面的proxyBeanMethods属性,因此我们引出了FULL和LITE模式。
Full模式和Lite模式Full
模式是指proxyBeanMethods = true
,开启代理bean的方法。此时调用配置类中每一个给而容器注册组件方法,都会从容器中找组件,保持单例模式。它保证了每个@Bean方法无论被调用多少次,返回的组件都是单例的。
Lite
模式是指proxyBeanMethods = false
,关闭代理bean的方法。容器中不会保存代理对象,每一次调用配置类里面的方法,·都会产生一个新的对象。这可以解决组件依赖的问题。它保证了每个@Bean方法调用多少次返回的组件都是新创建的。
那么我们应该思考什么时候用Full模式什么时候用Lite模式?
二、@Import 导入组件我们先看一下这个注解的内部结构。
三、@Conditional条件装配注解:满足我们Conditional指定的条件,就进行组件注入,不然不进行组件注入。
我们发现它的子注解还是相对比较多的,我们挑几个常见的注解来说一下:
案例:
这里我们故意将这个@Bean("tom")注释掉,但是我们依然保留user01(),我们看看我们的容器中有没有包含user01这个组件:
false,很遗憾,因为”tom“,user01也无法被注册了。
四、@ImportResource这个注解是用来导入spring配置文件的
五、@ConfigurationProperties这个注解是用来进行配置绑定的。
我们有两种方法:
方法一:@Component+@ConfigurationProperties组合使用
我们在核心配置文件applicantion.properties中配置前缀为mycar的值
我们看一下网页上这个car的属性是什么?
与我们在核心配置文件配置的值相同。
方法二:@EnableConfigurationProperties+@ConfigurationProperties组合使用
@EnableConfigurationPropertise:开启组件属性配置功能,并把这个组件自动注册到容器中。
需要注意的是: @ConfigurationProperties不会像Spring容器注入相关处理类,只是起到相关标记作用,相关处理逻辑还是由@EnableConfigurationPropertise导入处理类来完成。仅仅被标记EnableConfigurationPropertise注解的类,默认情况下也不会注册为Bean。