美文网首页
@SpringBootApplication解析

@SpringBootApplication解析

作者: Depro | 来源:发表于2021-07-27 12:05 被阅读0次

@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 {

}

1.@Target(ElementType.TYPE),只加在类上
2.@Retention(RetentionPolicy.RUNTIME),在运行时生效,这个是要先编译,再加到vm里运行,是可以反射调用的
RetentionPolicy.Resource,不编译,不会生成 .class文件,只保留.java原文件
RetentionPolicy.Class,会被compile编译生成.class文件,但是不会加载到vm里
3.@Documented,可加入javadoc文档
4.@Inherited,可以继承
5.@SpringBootConfiguration,表明做为springboot配置类
6.@EnableAutoConfiguration,表示自动配置
7.@ComponentScan,扫描路径

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {}

@EnableAutoConfiguration,中有一个@Import(AutoConfigurationImportSelector.class),这个就会把AutoConfigurationImportSelector中的public String[] selectImports(){}方法返回的字符串数组里的所有类全限定名加到spring容器中。

selectImports()方法中getAutoConfigurationEntry()--> getCandidateConfigurations()--> SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class)
--> loadSpringFactories()
--> classLoader.getResources("META-INF/spring.factories")
把当前AppClassLoad下所有jar下面META-INF/spring.factories文件加载到一个Map<String,List<String>>,key是spring.fcatories里接口的名字,List<String>是接口对应 的实现。
如果在自己的项目中加入META-INF/spring.factories,也会加载。

相关文章

网友评论

      本文标题:@SpringBootApplication解析

      本文链接:https://www.haomeiwen.com/subject/czywmltx.html