应用在Springboot的启动类上:
@SpringBootApplicationpublic class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}}
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 {.....}
是一个“三体”结构,重要的只有三个Annotation:
- @Configuration(在SpringBootConfiguration里面)
- 以JavaConfig形式的Spring IOC容器的配置类使用的那个@Configuration,所以这里的启动类标注了@Configuration之后,其本质也就是一个IOC容器的配置类
- @EnableAutoConfiguration
- 借助@import的帮助,将所有符合自动配置条件的bean定义加载到IOC容器。
- 也是一个复合Annotation。
@ComponentScan
- 自动扫描并加载复合条件的组件或bean定义,最终将这些bean定义加载到容器中。
- 可以通过basePackages等属性指定@ComponentScan自动扫描的范围。
如果不指定,则默认Spring框架实现从声明@ComponentScan所在类的package开始扫描,默认情况是不指定的 ,所以Springboot的启动类最好放在root package下。
@EnableAutoConfiguration
内容:
@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@AutoConfigurationPackage@Import({AutoConfigurationImportSelector.class})public @interface EnableAutoConfiguration {String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";Class<?>[] exclude() default {};String[] excludeName() default {};}
最关键的是:@Import(AutoConfigurationImportSelector.class)。
借助AutoConfigurationImportSelector类@EnableAutoConfiguration可以帮助Springboot应用将所有符合条件的@configuration都加载到当前Springboot创建并使用的IOC容器。@SpringBootApplication包含的方法
Class<?>[] exclude() default{};//根据Class来排除特定的类加入spring容器,传入参数是class类型String[] excludeName() default{};//根据Class name排除特定的类加入spring容器,传入参数是class的全类名字符串数组String[] scanBasePackages() default{};//指定扫描包,参数是包名的字符串数组Class<?>[] scanBasePackageClasses() default{};//指定扫描包,参数是Class类型数组
@SpringBootApplication三个重要注解
- @Configuration
- 定义Spring IOC容器的配置类
- @EnableAutoConfiguration
- 从classpath中搜寻所有META/Spring.factories配置文件,并将其中org.springframework.boot.autoconfigure.EnableAutoConfiguration对应得配置项,也就是一个自动配置类列表加载到IOC容器中。
- @EnableAutoConfiguration让Springboot根据类路径下的jar包依赖为当前项目进行自动配置。
- 对于所有标注@Configuration的配置类,统一使用ConfigurationClassParser解析的。
- @ComponentScan
- 自动扫描并加载符合条件的组件或者bean定义。
