一、@Configuration
@Configuration 注释的类 类似于于一个 xml 配置文件的存在(针对于ClassXmlPathApplicationContext 来说)。
不过它是由AnnotationConfigApplicationContext类进行解析并注册到Bean的注册表中。
-
基本使用
Full:即@Configuration(proxyBeanMethods = true),一般称为全配置
-
Lite:即@Configuration(proxyBeanMethods = false),一般称为轻量级配置
- 默认都是单实例_Full
-
示例
/** * 1、配置类里面使用@Bean标注在方法上给容器注册组件,默认也是单实例的 * 2、配置类本身也是组件 * 3、proxyBeanMethods:代理bean的方法 * Full(proxyBeanMethods = true)(保证每个@Bean方法被调用多少次返回的组件都是单实例的)(默认) * Lite(proxyBeanMethods = false)(每个@Bean方法被调用多少次返回的组件都是新创建的) */ @Configuration(proxyBeanMethods = false) //告诉SpringBoot这是一个配置类 == 配置文件 public class MyConfig { /** * Full:外部无论对配置类中的这个组件注册方法调用多少次获取的都是之前注册容器中的单实例对象 * @return */ @Bean //给容器中添加组件。以方法名作为组件的id。返回类型就是组件类型。返回的值,就是组件在容器中的实例 public User user01(){ User zhangsan = new User("zhangsan", 18); //user组件依赖了Pet组件 zhangsan.setPet(tomcatPet()); return zhangsan; } @Bean("tom") public Pet tomcatPet(){ return new Pet("tomcat"); } }
-
@Configuration测试代码如下:
/** * 1、配置类里面使用@Bean标注在方法上给容器注册组件,默认也是单实例的 * 2、配置类本身也是组件 * 3、proxyBeanMethods:代理bean的方法 * Full(proxyBeanMethods = true)(保证每个@Bean方法被调用多少次返回的组件都是单实例的)(默认) * Lite(proxyBeanMethods = false)(每个@Bean方法被调用多少次返回的组件都是新创建的) */ @Configuration(proxyBeanMethods = false) //告诉SpringBoot这是一个配置类 == 配置文件 public class MyConfig { /** * Full:外部无论对配置类中的这个组件注册方法调用多少次获取的都是之前注册容器中的单实例对象 * @return */ @Bean //给容器中添加组件。以方法名作为组件的id。返回类型就是组件类型。返回的值,就是组件在容器中的实例 public User user01(){ User zhangsan = new User("zhangsan", 18); //user组件依赖了Pet组件 zhangsan.setPet(tomcatPet()); return zhangsan; } @Bean("tom") public Pet tomcatPet(){ return new Pet("tomcat"); } }
- 最佳实战
- 配置 类组件之间无依赖关系用Lite模式加速容器启动过程,减少判断
- 配置 类组件之间有依赖关系,方法会被调用得到之前单实例组件,用Full模式(默认)
课程文字版:Spring Boot 2 | 底层注解篇:@Configuration详解
课程视频版:SpringBoot2全套完整版
二、@Import
@Bean、@Component、@Controller、@Service、@Repository,它们是Spring的基本标签,在Spring Boot中并未改变它们原来的功能。
导入组件
@Import({.......}) 添加(Class类型数组):将调用传入类的无参构造器创建对象放在容器中
使用@Import注解导入的组件,默认该组件的名字就是其全类名
三、@Conditional
条件装配:满足Conditional指定的条件,则进行组件注入
- 条件注解加在方法上,那么只有当条件成立以后,这个方法返回的组件才会被注册到容器中,否则,就不注册
- 加在类上,那么只有当条件成立以后,这个类下面的所有配置才能生效,否则,就不生效
四、@ImportResource
导入Spring配置文件
随便在某一个配置类上标注上一个@ImportResource注解
@ImportResource注解里面指定资源的路径
@ImportResource注解允许我们依旧还能使用Spring以前的XML配置文件这种方式,因为它可以导入该Spring配置文件,让其生效
五、@ConfigurationProperties
配置绑定
绑定 方式一:
- @ConfigurationProperties + @Component (都写在JavaBean类上)
在类(JavaBean类)上标注了该注解@ConfigurationProperties之后,为了让其生效,我们还得将该类型的组件添加到容器中(@Component) 只有容器中的组件才能拥有Spring Boot提供的强大功能,也就是容器提供的强大功能
绑定 方式二:
- @EnableConfigurationProperties + @ConfigurationProperties
- @EnableConfigurationProperties(传入JavaBean类):一定要写在配置类里面,因为配置类本身就是容器中的一个组件
- 开启(指定类型组件的)配置绑定功能
- 将指定类型的组件自动注册到容器中
- @ConfigurationProperties:还是写在JavaBean类上
- @EnableConfigurationProperties(传入JavaBean类):一定要写在配置类里面,因为配置类本身就是容器中的一个组件