1、springboot源码常用注解
1、组合注解:
元注解:可以注解到别的注解上的注解
组合注解:被注解的注解就是组合注解
2、@Value:就相当于传统的xml配置文件中的Value字段
@Value("张三")
private String name;
3、@ConfigurationProperties
我们需要取n个配置项,使用@Value一个一个来配置,显得十分low,我们可以是使用@ConfigurationProperties。标有@Configuration Properties的类所有属性和配置文件中的配置文件项进行绑定,绑定之后就可以通过这个类访问全局配置文件中的属性值了
@ConfigurationProperties有一个prefix参数,主要用来指定该配置项在配置文件中的前缀
4、@Import
@Import注解支持导入普通的Java类,并将声明成一个Bean。主要用于将多个分散的javacongfig配置类融合成一个更大的javaConfig
@Import的三种使用方式:
直接导入普通的Java类
@Import(Person.calss)
配合自定义的ImportSelector 使用
ImportSelector是一个接口,该接口只有一个selectimports方法,用于返回全类名数组。所以利用该特性我们可以给容器导入n个Bean
配合 ImportBe’an’DefinitionRegistrar 使用
importBeanDefinitionRegistrar也是一个接口,它可以手动注册bean到容器中,从而我们可以对类个性化使用(需要搭配@Import和@Configuration 一起使用)
5、@Conditional
@Condition注解可以实现只有在特定条件满足时才启动一些配置
Condition的matcher方法返回true,配置类会生效,如果返回false,则配置类不会使用
2、springboot启动过程
- ApplicationContextInitializer
- ApplicationRunner
- CommandLineRunner
- SpringApplicationRunListener
两大步骤:创建SpringApplication对象、运行run方法
总结:run阶段主要是回调4个监听器中的方法与加载项目中组件到IOC容器中,而所有需要回调的监听器都是从类路径下META-INF/Spring.factories 中获取。
3、springboot自动配置原理
1、@SpringBootConfiguration 注解
@Spring Boot Configuration标注在某个类上说明:这个类是SpringBoot的主配置类,SpringBoot就应该运行这个类main方法来启动SpringBoot应用
@SpringBootConfiguration是一个组合注解,组合了三个注解:
@SpringBootConfiguration:该注解表示这是一个SpringBoot的主配置类,其实他就是一个Configuration注解
@ComponentScan:开启组件扫描
@EnableAutoConfiguration:开启自动配置
2、@EnableAutoConfiguration 注解
定义:
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
@AutoConfigurationPackage
就是一个@Import注解,@Import({Registrar.class})导入了一个Registrar组件
一句话:@AutoConfigurationPackage注解就是将主配置类(@SpringBootConfiguration标注的类)的所在包以及下面的所有子包里面的组件扫描到spring容器中。所以说默认情况下,主配置包以外的包扫描不到
3、配置类导入规则
4、小结
1、SpringBoot启动会加载大量的自动配置类
2、我们看需要的功能有没有Spring Boot默认写好的自动配置类
3、我们在来看这个自动配置类到底配置了那些组件(只要我们要用的组件有,我们就不需要在来配置了)
4、给容器中自动配置类添加组件的时候,会从配置文件中获取某些属性,我们就可以在配置文件中指定这些属性的值
xxxAutoConfiguration:自动配置类给容器中添加组件
xxxAutoPerpertoes:封装配置文件中的属性