前言:
虽然工作中一直使用的是自研的一款基于spring的框架,但是随着springboot在各公司的广泛使用,公司的一些新项目也开始逐渐使用springBoot了,那么springBoot的一些特性就要仔细学习一下了。
什么是自动配置?
还记得之前使用springMVC的时候吗,不管是自动定义的bean类,还是从jar包中定义好的bean类都要手动配置到xml文件或者使用@service、@Component等注释来进行装配,装配的意思就是委托给spring去管理这些类。比如之前spring整合mybatis时,除了引入依赖包还要在spring.xml中配置一个SessionFactory和mapperScanne两个bean。但是在使用springboot时发现根本没有这项操作,而且导入的包也不一样了,springBoot导入的包就叫mybatis-xxx.jar,而springBoot引入的是mybatis-spring-boot-starter.jar。
那么什么是自动配置呢?就如上面所说的不需要手动添加任何内容就可以自动完成Bean的注册。
自动配置的原理是什么?
自动配置主要依赖于@SpringBootApplication注解 + xxx-spring-boot-starter.jar来完成。
springBoot项目初始化的时候会根据配置的@SpringBootApplication注解去自动扫描所有jar包中的spring.factories文件,然后将spring.factories中定义的EnableAutoConfiguration自动装配类中的bean装配到spring容器中。
jar包中的spring.factories文件是哪里来的呢
springboot官方提供了多种jar,命名规则为sping-boot-starter-xxx.jar,这类jar直接拿来即用,另一种需要使用者根据实际情况去封装,那么封装有几个规则且必须遵守:
1、命名需要符合(建议)xxx-spring-boot-starter.jar
2、目录中resource下的META-INFO下需要包含spring.factories文件
3、spring.factories需要指明自动配置类:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\xxxxxx
4、xxxx配置类需要添加@Configuration注解,并且完成待自动注入类的初始化。
以上4点就是开发者自己封装一个starter的所有过程,那么这样就可以理解jar包中的spring.factories文件是从哪里来的了。当然配置自动注入还有其他方式,比如自定义@EnableXXX注解来实现。
如下:
其他方式实现自动配置
使用这种方式去做自动配置,不需要创建spring.factories,但是需要自定义注解来实现AutoConfiguration,如何实现呢,需要在自定义注解中添加@Import(xxx.class), xxx.java中需要实现ImportSelect接口并且实现selectImports方法来指定自定义配置类。
但是在使用的时候就需要手动添加自定义注解到xxxApplication上了。
如下:
自定义注解:
指定自动配置类
综上就是springboot自动配置的原理,下一篇从代码的角度分析一下如何实现的自动配置。
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第16天,点击查看活动详情