Spring Boot@Enable*注解工作原理
表示启用某一项。
@EnableConfigurationProperties //启用某一个特性,可以吧配置文件的属性注入到bean中
配合 @ConfigurationProperties使用
@Async @EnableAsync
//搭配使用 @EnableAsync 表示配置文件启用异步执行 ;@Async表示该类支持异步
原理:
@Import 用来导入类 或者配置类。 (都会被Spring容器托管或加载)。配合类实现 =>>
Interface ImportSelector //接口selectImport方法的返回值,必须是一个class(全程),该class会被spring容器托管起来。使用@import导入这个类,就能实现容器注入bean。
Interface ImportBeanDefintionRegistrar,该接口registerBeanDefinitions方法的参数有一个BeanDefinitionRegistry,BeanDefinitionRegistry可以用来向Spring容器中动态注入bean。使用@import导入这个类,就能实现往容器中注入bean。
自定义注解和类体信息交换=>
@EnableAutoConfiguration注解的原理分析
本质上使用的是 importSelector
在@SpringBootApplicatioin中有。
@EnableAutoConfiguration
作用:从classpath中搜索所有META-INF/spring.factories配置文件。然后将其中org.springframework.boot.autoconfigure.EnableAutoConfiguration对应的key加载到spring容器中。多个用逗号隔开。
内部实现的关键
- ImportSelector 该接口的方法的返回值都会被纳入到spring容器中。
- SpringFactoriesLoader,该类可以从classpath中搜索所有META-INF/spring.factories配置文件,并读取配置。
只有spring.boot.enableautoconfiguration为true(默认true)的时候,才能启动自动配置。
排除类:
根据class @EnableAutoConfiguration(exclude=XXX.class)
根据class名称 @EnableAutoConfiguration(excludeName=“com.XXX”)
SpringBoot 事件监听
事件流程:
- 自定义事件,一般是继承ApplicationEvent抽象类
- 定义事件监听器,一般是实现ApplicationListener接口。
- 配置监听器。启动的时候,需要把监听器加入到spring容器中。
- 发布事件,使用ApplicationContext.publishEvent发布事件。
– 配置监听器方法:
- SpringApplication.addListeners添加监听器
- 把监听器纳入到Spring容器中管理
- 在application。properties使用context.listener.classes配置项配置 通过配置项:
context.listener.classes=[类名(全包名)]-- - - 使用@EventListener注解,再方法上加入@EventListener注解,切该类需要纳入spirng容器中管理。
通过spring.factories机制
– 使用context.listener.classes配置项配置 原理:(DelegatingApplicationListener)
– @EventListener 原理:(EventListenerMethodProcessor)
Spring Boot扩展分析
- ApplicationContextInitializer : 接口是在spring容器执行refreshed之前的一个回调
注册方法: 方法(1): SpringApplication.addInitializers
方法(2): 配置文件中添加context.initlizer.classes(多个用逗号隔开)
方法(3): 通过spring.factories机制
2. CommandLineRunner
容器启动后的最后一步回调
步骤:
1. a class implements CommandLineRunner
2. 把类交给容器管理
> 多个 CommndLineRunner通过 @Order([数字]) //数字越小,越先执行。
ApplicationRunner 重写run方法。
两者区别:
ApplicationRunner 参数是ApplicationArguments,对原始参数进行封装(可以处理key=value的参数)
CommandLineRunner参数原始参数,
SpringBootApplication注解的补充
exclude 排除类
excludeNames 按名字排除
scanBasePackages 修改扫描路径,该注解默认扫描当前包,及子包下的所有类
Banner设置:
- 关闭
- 自定义(新建文件,写入到新建的txt中)
或者在 application.properties中加入配置 banner.location=[自定义名称].txt
banner.charset配置项用来设置编码- 图片banner: banner.jgp banner.* /banner.image.location=[图片名称]
- 图片banner: banner.jgp banner.* /banner.image.location=[图片名称]
- 给配置项指定默认值的其他方式