spring boot特性——自动配置


搭建过springmvc项目和springboot项目的小伙伴儿一定感受过那来自springboot工程的方便性。


相比较于传统的springmvc项目,springboot抛弃了传统的复杂的各种xml的配置,遵从“约定大于配置”的理念,使我们可以最大程度上注重于项目的核心业务。某些程度上讲,这提升了我们的开发效率。


这得益于springboot自动配置这一特性,可以使我们在全局的配置文件application.yml中稍作简单的配置便可使应用得到顺利的运行。




那么springboot是怎么实现自动配置并将全局配置文件中的配置实现的呢?


首先,我们发现每个springboot项目的启动类都有这样一个注解:@SpringBootApplication,那么我们进入这个注解,可以看到这个注解实际是一些注解的合集,在这里面,我们可以找到一个叫做@EnableAutoConfiguration的注解,该注解的意思就是开启自动配置。



那么我们打开这个注解,我们发现这个注解导入了AutoConfigurationImportSelector.class这个类,这个类使用SpringFactoriesLoader.loadFactoryNames方法来扫描具有MEAT-INF/spring.factories文件的jar包。



我们打开spring-boot-autoconfigure这个依赖包,发现里面提供了大部分第三方插件的自动配置,该配置将帮助我们自动引入插件的bean,而无需自行配置bean。



打开spring.factories文件,我们可以看到其中配置了所有的autoconfigure的类名。



我们打开其中的一个配置,比如打org.springframework.boot.autoconfigure.aop下的AopAutoConfiguration这个类,其中@ConditionalOnProperty的意思是当全局配置中存在spring.aop配置时启动,当我们在application.yml中配置aop时,该类会将配置加载。




一些注解的释义:


@Configuration:标记该类为Spring bean配置类。


@ConditionalOnClass:标记当存在某些类时,该配置才会被加载。


@ConditionalOnBean:标记当存在某个Bean时,该配置才会被加载。


@EnableConfigurationProperties:标记某个Properties类作为Bean并进行引入。


@AutoConfigureAfter:标记在某个类配置加载后才会对该配置类进行加载。


@ConditionalOnMissBean:标记当该bean不存在时,才会加载当前方法定义的Bean。



为了助于理解,我使用自定义starter的方式自动配置了自己创建的bean:

https://createdpro.com/a/46000624028


spring boot
发布

街角有人祝福,巷口有人哭,这里却没人评论ε=(´ο`*)))