java boot_【Java入门】SpringBoot自动配置原理

一、运行原理

Spring Boot的运行是由注解@EnableAutoConfiguration提供的。

dd763fc97372a10ec14b6078769416ee.png

这里的关键功能是@Import注解。EnableAutoConfigurationImportSelector使用SpringFactoriesLoader.loadFactoryNames方法来扫描具有MEAT-INF/spring.factories文件的jar包(1.5版本以前使用EnableAutoConfigurationImportSelector类,1.5以后这个类废弃了使用的是AutoConfigurationImportSelector类),下面是spring-boot-autoconfigure-1.5.4.RELEASE.jar下的MEAT-INF中的spring.factories文件的部分内容。

f38a64d2eced7f67b5c6b3faebf0a7e1.png

里面的类都是自动配置类,SpringBoot会根据这些自动配置类去自动配置环境。

下面我们就自动动手写一个starter。

二、自定义Starter

首先先介绍几个条件注解。

@ConditionalOnBean:当容器里有指定的Bean为true@ConditionalOnClass:当类路径下有指定的类为true@ConditionalOnMissingBean:当容器里没有指定的Bean为true@ConditionalOnProperty:指定的数据是否有指定的值...了解了条件注解后,我们开始自定义Starter。

1、在自定义Starter之前先要在Maven中填写依赖。

6949c23a2adaa217905a01c3e18d34a0.png

2、完成TestProperties类,这个类定义了默认的属性值,如该类中,只有一个属性值msg,默认为world。@ConfigurationProperties注解会定义一个匹配,如果想修改属性值,可以在application.properties中使用“匹配.属性=修改的值”进行修改。如test.msg = tan

b95b9dc84d3e17666eaf61a5771892b3.png

3、完成服务类。服务类是指主要的功能类,如果没有SpringBoot,这些服务类在Spring中都是需要自己去配置生成的。如SpringMVC中的DispatcherServlet、Mybatis的DataSource等。

84d742280e16423f41d4a6c5f9c104d8.png

4、完成自动配置类。自动配置类主要作用是SpringBoot的配置核心,它会写在MEAT-INF/spring.factories中,告知SpringBoot在启动时去读取该类并根据该类的规则进行配置。@EnableConfigurationProperties注解根据TestProperties类开启属性注入,允许在application.properties修改里面的属性值。@ConditionOnClass会检测是否存在TestService类@ConditionOnProperty类会查看是否开启该自动配置。默认开启(true)。@ConditionOnMissingBean会检测容器中是否有TestService类的对象,如果没有则生成一个。

7396e4d22120977b134c7869932a2ba2.png

5、最后一步,不要忘记在在MEAT-INF文件夹中创建spring.factories文件。内容很简单,告诉SpringBoot去读取TestServiceAutoConfiguration类。

73aed24a56f827e39997685e09d4106e.png

好啦,搞定!下面可以使用maven install命令把starter存到本地,其他SpringBoot项目需要使用这个starter,直接导入就可以啦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值