springboot自动装配
1 简介
从我们使用后来看springboot手脚架.只需要简单的配置就能搭建一个开发框架.无需各种复杂的pom文件,无需各种复杂的配置文件.简单运行main方法就可以直接运行.与其他框架的整合也是极其方便.这也正如官方简介一样easy.
2 源码解析
先看启动类,通过启动类看到@SpringBootApplication 注解被标注到上面.那么不难推测,这个注解背后肯定存在某种不为人知事情.那么搞定他背后的东西就要从这入手..
@SpringBootApplication
被@SpringBootApplication标注的类。说明当前类是springboot应用的启动类。
@SpringBootConfiguration
- Spring Boot的配置类
- 标注在某个类上,表示这是一个Spring Boot的配置类
被当前注解标注说明当前类可以作为springboot应用的配置类
@EnableAutoConfiguration
- 开启自动配置功能
- 以前使用Spring需要配置的信息,Spring Boot帮助自动配置;
- @EnableAutoConfiguration 通知SpringBoot开启自动配置功能,这样自动配置才能生效。
1. @AutoConfigurationPackage
自动配置包注解
默认将主配置类( @SpringBootApplication )所在的包及其子包里面的所有组件扫描到Spring容器中。如下
2 . @Import(AutoConfigurationImportSelector.class)
通过源码看出 AutoConfigurationImportSelector implements DeferredImportSelector 重写 selectImports 方法.其中selectImports 中调用
org.springframework.boot.autoconfigure.AutoConfigurationImportSelector#getAutoConfigurationEntry方法如下:
总结
任何一个springboot应用,都会引入spring-boot-autoconfigure,而spring.factories文件就在该包下面。spring.factories文件是 Key=Value形式,多个Value时使用,隔开,该文件中定义了关于初始化,监听器等信息,而真正使自动配置生效的key是 org.springframework.boot.autoconfigure.EnableAutoConfiguration
@EnableAutoConfiguration注解通过@SpringBootApplication被间接的标记在了Spring Boot的启动类上。在 SpringApplication.run(…)的内部就会执行selectImports()方法,找到所有JavaConfig自动配置类的全限定名对应的 class,然后将所有自动配置类加载到Spring容器