文章目录
一、常用配置注解:
@Configuration注解
@Configuration用于声明一个配置组件。
- 注意点 :proxyBeanMethods 属性,默认为true,该配置类会被代理(CGLIB),当设置为true时在同一个配置文件中调用其它被@Bean注解标注的方法获取对象时会直接从IOC容器之中获取,反之会new一个新对象;
@Import注解
声明在一个类上,指定一个类数组,这些类将会被调用无参构造方法从而注册为组件,默认组件名称为全类名
@Conditional注解
声明在类或者方法上,指只有在定义在@Conditional的条件符合的情况下才会加载这个组件或bean,不符合不进行加载
@ConfigurationProperties
用于给组件提供配置文件的属性,springboot将根据配置自动将属性注入到组件属性中,前提是当前作用的范围必须是组件,例如和@Component和@Bean一起搭配使用
@EnableConfigurationProperties
用于指定声明了ConfigurationProperties的类,springboot会向这些类注入属性并将这些类注册为组件
二、自动加载注解
springboot启动类只有一个@SpringBootApplication注解,@SpringBootApplication主要包含如下两个注解
@SpringBootConfiguration
- 这个注解包含@Configuration注解,声明这个一个配置类,springboot启动会加载它
@EnableAutoConfiguration注解开启自动配置
@EnableAutoConfiguration注解中包含一个@AutoConfigurationPackage注解,@AutoConfigurationPackage包含一个@Import注解导入了一个AutoConfigurationPackages.Registrar.class的静态内部类,这个类会通过注解信息获取到当前注解所在的启动类的包路径
@EnableAutoConfiguration另一个@Import(AutoConfigurationImportSelector.class)导入一个AutoConfigurationImportSelector类,该类下的selectImports方法会通过读取spring-boot-autoconfigure jar包下的META-INF中的spring.factories文件中写死的所有的配置类路径进行加载,在读取了spring.factories的所有类加载时,通过@Conditional系列注解的条件判断结合大量的@EnableAutoConfiguration指向配置类,配置类再通过@ConfigurationProperties读取spring-boot-autoconfigure jar包下的additional-spring-configuration-metadata.json和spring-configuration-metadata.json默认配置信息从而初始化组件。通过上面的一系列逻辑,springboot真正做到按需加载。当然,如果我们想覆盖默认的配置,我们只需要直接使用@Bean定义一个相同的名称的组件即可。