个人理解:spring-boot的自动配置原理

       spring-boot的自动配置主要来自于Starter的依赖,在spring-boot创建完成之后,会自动导入一系列依赖,而starter会将第三方框架集成到spring-boot中,以mybatis整合sping-boot为例,在项目中会导入mybati-spring-boot-starter依赖。这类starter依赖的作用就是自动配置。

整合mybatis:

        mybati-spring-boot-starter依赖会帮助我们进行web.xml的配置、根容器的配置、子容器的配置、字符编码集的配置等等。那么这种配置是怎么自动生成的呢,通过学习了解到如下:

1、首先spring-boot会进行依赖加载 如果有starter依赖,则会去尝试加载该框架

2、对类路径进行扫描,寻找寻找META-INF文件夹下的spring.factories文件,mybatis的spring.factories文件在mybatis-spring-boot-autoconfigure-2.1.4.jar下面,其未含有starter因为spring-boot会先找到mybatis-spring-boot-starter-2.1.4.jar依赖但这个依赖下未含有spring.factories文件但因为两个依赖互为子父类依赖,向上查找能够查找到该文件,并解析文件,得到自动配置类org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration,通过反射得到类的对象。

3、该类上注有:

@Configuration注解,表明该类为一个配置类

@ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})注解,表示雷路径上必须要SqlSessionFactory和SqlSessionFactoryBean两个类才能启动

@ConditionalOnSingleCandidate(DataSource.class)注解,该类需要一个数据源的bean,这个数据源sping-boot会通过读取外化配置文件来获得。

@EnableConfigurationProperties(MybatisProperties.class)注解,启动配置属性类,这个配置属性类帮助spring-boot读取外化配置文件。

4、该类为一个配置类,所以可以在类中的方法上使用@bean注解,MybatisAutoConfiguration下有一个方法public SqlSessionFactory sqlSessionFactory(DataSource dataSource),该方法与类容与使用java手动整合(非spring-boot)一致,在方法中配置dataSource、MapperLocations等模板化的配置,最后返回SqlSessionFactory。

5、上述模板化的配置中不是所有的配置都是固定,所以使用了MybatisProperties类来进行读取外化配置文件,外化配置文件就是在我们使用spring-boot中必须要填写的的一些基础配置,比如数据源。在MybatisProperties类上有@ConfigurationProperties(prefix = "mybatis")注解,表示在读取时,只读前缀为mybatis的value(外化配置文件类似map一样的集合以键值对形式存放的)

总结:

spring-boot的自动配置原理:

starter依赖下至少需要有两个类:一个自动配置类(负责自动配置模板化的配置)、一个自动配置属性类(负责读取该框架的必须要手动填写的值给到自动配置类使用)

必须要有META-INF文件夹和spring.factories文件(存储自动配置类的完整限定名)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值