赞
踩
目录
2.@SpringBootConfiguration(位于@SpringBootApplication上)
3.@EnableAutoConfiguration(位于@SpringBootApplication上)
4.@ComponentScan(位于@SpringBootApplication上)
5.@AutoConfigurationPackage(位于@EnableAutoConfiguration注解上)
6.@Import({AutoConfigurationImportSelector.class})(位于@EnableAutoConfiguration注解上)
SpringBoot的自动配置就是当spring容器启动后,一些自动配置类(只是自动配置类,并不是当前组件配置到IOC容器当中,自动配置类通过@Conditional注解来按需配置)就自动装配的IOC容器中,不需要我们手动去注入,从而简化了开发,省去了繁琐的配置。
根据我们添加的jar包依赖,会自动将一些配置类的bean注册进ioc容器,我们可以需要的地
方使用@Autowired或者@Resource等注解来使用它。
我们从SpringBoot应用启动入口@SpringBootApplication注解标注类中的main()方法开始,点进SpringBootApplication注解如下
- @Target({ElementType.TYPE})
- @Retention(RetentionPolicy.RUNTIME)
- @Documented
- @Inherited
- @SpringBootConfiguration
- @EnableAutoConfiguration
- @ComponentScan(
- excludeFilters = {@Filter(
- type = FilterType.CUSTOM,
- classes = {TypeExcludeFilter.class}
- ), @Filter(
- type = FilterType.CUSTOM,
- classes = {AutoConfigurationExcludeFilter.class}
- )}
- )
- public @interface SpringBootApplication {
- // 根据class来排除特定的类,使其不能加入spring容器,传入参数value类型是class类型。
- @AliasFor(annotation = EnableAutoConfiguration.class)
- Class<?>[] exclude() default {};
- // 根据classname 来排除特定的类,使其不能加入spring容器,传入参数value类型是class的全类名字符串数组。
- @AliasFor(annotation = EnableAutoConfiguration.class)
- String[] excludeName() default {};
- // 指定扫描包,参数是包名的字符串数组。
- @AliasFor(annotation = ComponentScan.class, attribute = "basePackages")
- String[] scanBasePackages() default {};
- // 扫描特定的包,参数类似是Class类型数组。
- @AliasFor(annotation = ComponentScan.class, attribute ="basePackageClasses")
- Class<?>[] scanBasePackageClasses() default {};
- }
标注了SpringBootConfiguration注解的类表明这是springboot的一个配置类,点进此注解源码如下,说明主程序类也是一个配置类。
- @Target({ElementType.TYPE})
- @Retention(RetentionPolicy.RUNTIME)
- @Documented
- @Configuration
- public @interface SpringBootConfiguration {
- @AliasFor(
- annotation = Configuration.class
- )
- boolean proxyBeanMethods() default true;
- }
EnableAutoConfiguration中注解作用如下注释,
- @Target({ElementType.TYPE})
- @Retention(RetentionPolicy.RUNTIME)
- @Documented
- @Inherited
- // 自动配置包
- @AutoConfigurationPackage
- // Spring的底层注解@Import,给容器中导入一个组件;
- // 导入的组件是AutoConfigurationPackages.Registrar.class
- @Import({AutoConfigurationImportSelector.class})
- // 告诉SpringBoot开启自动配置功能,这样自动配置才能生效。
- public @interface EnableAutoConfiguration {
- String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
- // 返回不会被导入到 Spring 容器中的类
- Class<?>[] exclude() default {};
- // 返回不会被导入到 Spring 容器中的类名
- String[] excludeName() default {};
- }
指定扫描哪些组件,默认是扫描主程序所在的包以及其子包。
- @Retention(RetentionPolicy.RUNTIME)
- @Target({ElementType.TYPE})
- @Documented
- @Repeatable(ComponentScans.class)
- public @interface ComponentScan {
- ...
- }
自动配置包(将指定的一个包下的所有组件导入到容器当中)
@AutoConfigurationPackage 注解中存在一个 @Import({Registrar.class}) 注解,自动配置包就是通过这个 Registrar 类的方法来完成的。
- @Target({ElementType.TYPE})
- @Retention(RetentionPolicy.RUNTIME)
- @Documented
- @Inherited
- @Import({Registrar.class})
- public @interface AutoConfigurationPackage {
- }
将 spring-boot-autoconfigure-x.x.x.jar包中 META-INF/spring.factories文件中的内容加到IOC容器
spring.factories中一共有 133个自动配置类。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。