摘要
本篇SpringBoot自动配置学习笔记纲要:
1,我们用SpringBoot的理由是因为它可让开发者更加快速高效搭建Spring应用,背后是“约定优先于配置”的理念和自动配置技术;
2,自动配置技术实现原理
3,自定义自动配置示例
1 自动配置解决了什么问题
我们用Spring Boot的理由
我们用Spring Boot的理由是什么?我的感觉是它大大降低了使用Spring 的门槛,回想之前用spring框架一个项目里各种XML配置,想启动个工程咋这么难,真不想回到那样的日子了。
SpringBoot能够让我们更加快速高效的搭建Spring 应用,是因为它的理念是“约定优先于配置”:
- 约定一些推荐的默认配置
- 开发人员只需要指定非默认的配置
SpringBoot 能够按照约定进行默认配置,自动推测用户需要的依赖并注册相应的bean到容器中,主要归功于它的自动配置特性。如此神奇的自动配置特性是如何实现的?
2 自动配置实现原理
在启动类(一般均位于src/main/java
根路径下)中加上@SpringBootApplication
注解就开启了SpringBoot框架,打开这个注解的实现发现它包含了三个最主要的注解
- @SpringBootConfiguration(打开看到就是@Configuration,表示这是一个JavaConfig配置类)
- @ComponentScan (启动扫描组件,关于该注解详细介绍看这篇帖)
- @EnalbleAutoConfiguration(开启自动配置功能)
负责开启自动配置的是@EnableAutoConfiguration
,打开看它的实现
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(EnableAutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
// ......
}
这里面最重要的是@Import
注解,它负责引入EnableAutoConfigurationImportSelector
类把它作为bean注册到Spring容器中。从类名可以猜出EnableAutoConfigurationImportSelector
应该是负责选择引入哪些配置,看它的源码中有个selectImports
方法:
//spring-boot-autoconfigure版本是2.0.3-RELEASE
public String[] selectIm