Springboot自动装配源码分析
Springboot自动装配源码分析
1.从@SpringbootApplication点进去
2.可以看到核心的三个注解
@SpringbootConfiguration
@EnableAutoConfiguration
@ComponentScan
显然,实现自动装配的注解是@EnableAutoConfiguration,意为开启自动装配
至于另外两个,@SpringbootConfiguration其实和@Configuration注解一样,用于标志这是个配置文件;@ComponentScan是开启组件扫描,这里不加赘述。
从@EnableAutoConfiguration点进去
3.可以看到该注解上有两个重要的注解:@[email protected](AutoConfigurationImportSelector.class);
这里起核心作用的是@Import(AutoConfigurationImportSelector.class)注解里面的AutoConfigurationImportSelector类,意为‘自动配置导入选择器‘,另一个注解自行查阅。
从AutoConfigurationImportSelector点进去
4.该类中有一个至关重要的方法:getCandidateConfiguration。从这个方法点进去
5.可以看到,这个方法会加载jar包中META-INF/spring.factories文件中配置的配置对象,自动配置定义的功能。
6.springboot中实现自动装配的在这个文件中,可以看到Springboot实现了AOP/PropertyPlaceholder/FreeMarker/HttpMessageConverter/jackson/DataSource/DataSourceTransactionManager/DispatcherServlet/WebMvc等等功能的自动装配。
总结:.springboot的自动装配原理
Springboot的自动装配是因为在启动类上贴有@SpringbootApplication注解,这个注解表明该类为一个spring的配置类。
项目启动时,会将贴有该注解的类的所在包名下的所有组件扫描加载到spring容器。
@SpringBootApplication注解内部是@SpringBootApplication = (默认属性)@SpringbootBootConfiguration+ @EnableAutoConfiguration + @ComponentScan的三大注解的集成
- @ComponentScan:开启组件扫描
[email protected]:作用等同于@Configuration注解,用于表明这是一个spring的配置类
[email protected]:通过@import注解内部导入AutoConfigurationImportSelector(自动配置导入选择器),该类中有个getCandidateConfigurations方法加载jar包中META-INF/spring.factories文件中配置的配置对象,自动配置定义的功能