欢迎去我的个人博客——晓坞坐坐,里面有很多有趣的文章,不止是技术。www.lixiaodongisme.com
随着spring体系的发展,我们在开发时需要配置整合的东西也越来越多,在进行开发时,繁琐的配置浪费了大量的时间与精力。此时spring boot就应运而生了。spring boot为我们整合了常用的J2EE体系,极大的简化了我们的开发。作为一名Java程序员,学习spring boot的使用,也是势在必行。 spring boot的理念是“约定大于配置”,通俗的说,就是spring boot为我们提供了一套默认的配置,不需要我们再去手动的配置xml配置文件,只有当spring boot默认提供的配置不满足我们的需求时,我们再去修改默认配置。那么,spring boot是如何做到自动装配的呢?下面就通过源码来学习一下spring boot的自动装配机制。
1. @SpringBootApplication
1.1@SpringBootConfiguration
- 表示该类是一个配置类。spring boot建议我们使用该注解来代替传统的xml配置文件;
- @Configuration包含了@Component。所以加了@Configuration注解的类会自动纳入spring容器。
1.2@EnableAutoConfiguration
1.2.1@AutoConfigurationPackage
我们以往使用spring进行传统方式的开发时,需要在配置文件中定义一个scan扫描器,在xml配置了这个标签后,spring才可以自动去扫描base-pack下面或者子包下面的java文件,如果扫描到有@Component @Controller@Service等这些注解的类,则把这些类注册为bean。 在spring boot中,我们只需要将我们自己写的java文件,放到@SpringBootApplication所在类的包下,spring boot就可以自动的帮我们完成扫描,不需要我们再去手动配置扫描器,简化了我们的开发流程。 spring boot就是使用@AutoConfigurationPackage这个注解,完成了自动扫描,原理如下:
1.2.2AutoConfigurationImportSelector
在我们的开发过程中,除了我们自己编写的代码外,我们还需要引用很多第三方的依赖,spring boot也可以通过自动配置,帮我们引入第三方的依赖。其原理就是通过@EnableAutoConfiguration这个注解导入的AutoConfigurationImportSelector类来实现的。
AutoConfigurationImportSelector这个类通过SpringFactoriesLoader.loadFactoryNames这个方法来加载第三方配置。源码如下:
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\
......
当然了,这些AutoConfiguration不是所有都会加载的,会根据AutoConfiguration上的@ConditionalOnClass等条件,再进一步判断是否加载。下篇文章我们通过HttpEncodingAutoConfiguration实例来分析整个自动配置的过程。