🛫更多知识总结见SpringBoot 2专栏
🚕本篇知识点总结自尚硅谷雷神的视频
🚒博主对于该知识尚在学习阶段
🚄如果发现存在问题请毫不吝啬的指出
🚀🚀扎哇太枣糕的博客首页🚀🚀
目录
向容器注册组件@Bean
注册组件的@Component
条件装配@Conditional
导入配置文件@ImportResource
添加指定类的组件到容器@Import
配置绑定@ConfigrationProperties
向容器注册组件@Bean
在Spring中向容器中注册一个Bean使用的是applicationContext.xml配置文件中的bean标签,但是SpringBoot中使用的是MyConfig配置类中方法加@Bean注解。这两种方式得到的结果是一样的,只不过是两种不同的编码风格而已。
单纯的写代码还不行,要想办法让容器知道你想要注册Bean,Spring使用的方法是在web.xml中声明applicationContext.xml配置文件使其中的配置生效,SpringBoot使用的是@Configuration注解向容器中注册,因为配置类其本身而言也是一个组件。
🚩配置类中使用的注解
@Configuration:向SpringBoot声明这是一个配置类,相当于web.xml里的配置文件声明
@Bean:向容器注册注解下面方法返回值对应的对象,相当于bean标签。@Bean注解还可以使用参数给对象命名,相当于bean标签中的id属性。默认命名为注解下面的方法名🚩获取指定的组件
run.getBean()方法
🚩容器中对象创建模式
默认为单例模式,也就是在容器中创建好所有的对象,当外部需要获取对象的时候跳过创建步骤直接去容器中拿即可,所以说无论外部调用多少次组件注册方法获取的都是同一个对象。当然还可以修改属性proxyBeanMethods(Bean方法代理模式)的值进行单例多例的切换,属性值的改变导致SpringBoot底层拥有两种配置模式:
- Full(全配置):proxyBeanMethods为true,单例,判断容器中有没有该对象,有则直接取无则创建
- Lite(轻量配置):proxyBeanMethods为false,多例,对象直接创建。相较于全配置的先判断再创建或者获取,Lite直接创建节省了时间,所以被称为是轻量级配置。
如果存在组件依赖的问题的话,必须采用全配置。所谓的组件依赖就是说在容器中一个组件中的属性是另一个组件或者说使用到了另一个组件,此时就称这个组件依赖于另一个组件。如果采用轻量配置的话,这个组件中的属性将不是另一个组件对象,虽然对象名称都一样但是地址不同。
注册组件的@Component
@Component:每一层都通用的注解,用于注册组件到容器中,相当于bean标签。缺点就是辨识度不高,无法通过注解理清楚这是哪一层的业务
@Controller:controller层的作用相当于@Component注解
@Service:service层实现类的作用相当于@Component注解
@Repository:mapper层实现类的作用相当于@Component注解
条件装配@Conditional
@Conditional:满足条件就向容器中注册组件
案例一@ConditionalOnBean:容器中的组件之间存在组件依赖,当被依赖的组件不存在的时候,不向容器中添加另一个组件
⚠ 如果将这个注解放在类上的话, 即是满足条件时类中的所有方法才能生效,否则都不生效。
⚠ 并且在类中的组件注册也是顺序的,使用条件装配注解时会因为注册写在后面就被判断为不满足条件
案例二@ConditionalOnMissingBean:没有组件时进行装配
导入配置文件@ImportResource
@ImportResource
添加指定类的组件到容器@Import
@Import:调用类中的无参构造器创建一个对象作为组件添加到容器中,组件的默认名为类的全限名
配置绑定@ConfigrationProperties
@ConfigrationProperties:将实体类与配置文件的配置项相绑定,直接给实体类中的属性注入数据。prefix属性是指定配置文件里引用属性的前缀,且@ConfigrationProperties必须配合@Component注解使用才能让容器知道有这么一个绑定规则
如果@ConfigrationProperties不配合@Component注解使用的话,还可以在配置类上使用@EnableConfigurationProperties让容器知道有这么一个绑定规则,属性为实体类的class文件