Springboot笔记
第三方与官方的jar包有什么不同?
官方以spring-boot-start-xxx,condition条件满足
第三方 xxx-spring-boot-start
Springboot启动类注解
首先在springboot启动类上只有一个 @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}
)}
-
@SpringBootConfiguration 主要是一个配置类
-
ElabeAutoConfiguration
//主要是使用这两个注解导入类
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
Spring 的注解发展
- Spring 2.5 @Controller @Component 等
- Spring 3.0 @Configuration @bean --使用配置类解决xml
- Spring 3.1 使用注解模块化,@EablexxautoConfiguraction @import
@import 导入类时有四种方式
-
直接导入class类
- @import({xxx.class,xxxxxx.class})
-
导入配置类(使用@configuration+@bean 配置的类)
- @import(xxxx.class)----xxxx类中使用配置类加入了其他的类
-
导入一个select数组-----Springboot 中使用的此种方式
- 定义一个类 xxx implements importSelector
- 实现 selectimport 方法 , 返回数组(类名 xxx.class.getname)
- @import(select.class)
-
直接返回对象 registrar
- @import(xxx.class)
EableConfiguraction
@AutoConfigurationPackage @Import({AutoConfigurationImportSelector.class})
-
AutoConfigurationImportSelector.class
-
加载springboot的配置类,其中方法为
public String[] selectImports(AnnotationMetadata annotationMetadata) { if (!this.isEnabled(annotationMetadata)) { return NO_IMPORTS; } else { AutoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader.loadMetadata(this.beanClassLoader); AutoConfigurationImportSelector.AutoConfigurationEntry autoConfigurationEntry = this.getAutoConfigurationEntry(autoConfigurationMetadata, annotationMetadata); return StringUtils.toStringArray(autoConfigurationEntry.getConfigurations()); } }
-
getAutoConfigurationEntry 方法中的 getCandidateConfigurations 方法
List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
从SpringFactoriesLoader.loadFactoryNames 获取配置文件名
-
-
spring.factories中 以kv键值对存储
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\ org.springframework.boot.autoconfigure.aop.AopAutoConfiguration