SpringBoot的自动装配原理
自动装配主要提供两种主要功能,以下分别介绍两种的实现。
- 为每个springboot中要使用的类提供自动配置
- 程序员可以通过配置文件,覆盖默认配置,使自定义配置生效
1. 提供自动配置
主启动类
//@SpringBootApplication 来标注一个主程序类
//说明这是一个Spring Boot应用
@SpringBootApplication
public class SpringbootApplication {
public static void main(String[] args) {
//启动一个Spring Boot应用
SpringApplication.run(SpringbootApplication.class, args);
}
}
@SpringBootApplication
- 作用:标注在某个类上说明这个类是SpringBoot的主配置类 ,SpringBoot就应该运行这个类的main方法来启动SpringBoot应用;
进入这个注解:可以看到上面还有很多其他注解!
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {
@Filter(
type = FilterType.CUSTOM,
classes = {
TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {
AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
// ......
}
- @EnableAutoConfiguration : 开启自动配置功能
以前我们需要自己配置的东西,而现在SpringBoot可以自动帮我们配置 ;@EnableAutoConfiguration告诉SpringBoot开启自动配置功能,这样自动配置才能生效
spring.factories - 配置所在
在spring.factories
结论
-
SpringBoot在启动的时候从类路径下的spring.factories中获取EnableAutoConfiguration指定的值
-
将这些值作为自动配置类导入容器 , 自动配置类就生效 , 帮我们进行自动配置工作;
-
整个J2EE的整体解决方案和自动配置都在springboot-autoconfigure的jar包中;
-
它会给容器中导入非常多的自动配置类 (xxxAutoConfiguration), 就是给容器中导入这个场景需要的所有组件 , 并配置好这些组件 ;
-
有了自动配置类 , 免去了我们手动编写配置注入功能组件等的工作;
2.覆盖默认配置
xxxxAutoConfigurartion
:自动配置类;给容器中添加组件
xxxxProperties
: 封装配置文件中相关属性;
@ConditionalOnxxxx
注解 :根据不同的条件判断,如果满足指定的条件,整个配置类里面的配置就会生效
-
一但这个配置类生效;这个配置类就会给容器中添加各种组件;
-
这些组件的属性是从对应的properties类中获取的,这些properties类里面的每一个属性又是和我们自定义的配置文件绑定的;
-
所有在配置文件中能配置的属性都是在xxxxProperties类中封装着;
-
在配置文件中指定属性,就可以覆盖默认配置;