通过点进SpringBoot的主启动入口的@SpringBootApplication可以看到两个注解:
@SpringBootConfiguration @EnableAutoConfiguration
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//主程序入口
//这个注解表示这是一个springboot应用,并且导入了自动配置类
@SpringBootApplication
public class SpringBootStudyApplication {
//SpringApplication.run 启动springboot应用
public static void main(String[] args) {
SpringApplication.run(SpringBootStudyApplication.class, args);
}
}
@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}
)}
)
@SpringBootApplication 有两个作用
一是 通过@SpringBootConfiguration 表示这是一个springboot应用
二是通过@EnableAutoConfiguration 自动装配所有的配置文件
EnableAutoConfiguration通过AutoConfigurationImportSelector下的getCandidateConfigurations方法通过加载类名的方式加载META-INF/spring.factories下的自动配置类,并且配置为一个List<String> configurations 并且返回。所以在启动主程序入口时,springboot便自动加载了所有的自动配置类(如spring-boot-start-web包括了所有的springmvc的功能)。但是并不是所有被加载的配置文件都生效,只有在相关启动器被配置时,这个配置文件在会生效。
yaml可以对已经装配的自动配置类,进行配置。如设置端口等
springboot中有大量的自动配置类在启动应用时加载到IOC容器中,通过配置启动器也就是Spring-boot-start-xxx来启用这些自动配置类XXXAutoConfigurartion,XXXProperties是与这个自动配置类绑定的一个配置类。XXXProperties中有许多会用到的属性,我们可以通过yaml配置文件,对其进行配置。
XXXAutoConfigurartion(自动配置类,通过ConditionalOnXXX判断条件决定是否是这个自动配置类生效)->XXXProperties(内部有属性可以使用,或者使用Yaml可以对这个自动配置类进行配置,这个XXXProperties,通过Prefix=”xxx.xxx“,与yaml配置文件进行绑定)
这只是自己第一次学习SpringBoot自动装配原理的,自己的第一次浅理解。