文章已同步至GitHub开源项目: Java超神之路
SpringBoot的主旨是约定大于配置
,开发项目初期阶段,我们不需要做过多的配置,SpirngBoot已经帮我们自动配置好了大部分的内容,比如仲裁依赖机制
,自动引入需要的依赖,自动配置等内容。让我们能够将更多的精力放在业务逻辑上,那么,它是如何实现自动配置的呢?
首先我们可以看到,在SpringBoot的启动类上,有一个@SpringBootApplication
的注解。
接下来,我们分析这个注解。点进去,发现它主要是由以下的几个注解组合而成的。
@SpringBootConfiguration // 表示这是一个配置类
@EnableAutoConfiguration
@ComponentScan // 包扫描规则
我们挨个分析。
点进去我们发现,它就是一个Configuration
@Configuration
@Indexed
public @interface SpringBootConfiguration {
@AliasFor(
annotation = Configuration.class
)
boolean proxyBeanMethods() default true;
}
Spring中我们已经学过这个注解了,他代表当前是一个配置类,所以,在 SpringBootApplicaton
中标注的@SpringBootConfiguration
注解的作用就是标注此启动类是一个配置类。
从之前的Spring中我们也知道,这个注解表示IoC容器在进行注册的时候,从此注解中指定的方式进行包扫描,也不用过多纠结。
@AutoConfigurationPackage // 通过主程序的所在的包名进行批量注册
@Import(AutoConfigurationImportSelector.class) //
public @interface EnableAutoConfiguration {
String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
Class<?>[] exclude() default {};
String[] excludeName() default {};
}
这个注解主要由两个注解组成。我们一一分析
@AutoConfigurationPackage
注解register(registry, new PackageImports(metadata).getPackageNames();
方法,得到启动类的包下的组件进行循环注册。xxxxxAutoConfiguration ---> 组件 ---> xxxxProperties里面拿值 ----> application.properties
以上就是SpringBoot的自动配置功能的底层原理了,抛砖引玉,欢迎大家指出不足。
文章已同步至GitHub开源项目: Java超神之路 更多Java相关知识,欢迎访问!