SpringBoot的自动化配置

SpringBoot的自动化配置原理

简介

      SpringBoot自动化配置可以将繁琐的配置项“屏蔽”,提供一套大多数项目工程的通用配置,通过覆盖的方式在自己的项目中做个性化配置可以。俗称:约定大于配置。具体实现逻辑及自定义自动化配置starter将在下文介绍。

原理

     SpringBoot项目启动类中,有一个很重要的注解@SpringBootApplication,这是一个组合注解,详情如下:

     

    其中自动化配置的关键注解是@EnableAutoConfiguration,同样此注解也是一个组合注解。详情如下:

    

@EnableAutoConfiguration注解中,通过@Import注解,将自动化配置类 AutoConfigurationImportSelector加载到IOC容器中。通常将Java Bean 加入到容器管理中的方法有两种方式,一种是使用XML配置的方式,一种是使用注解的方式。其中使用注解方式有多个注解可以实现此效果。例如@Controller、@Component、@Import注解等。下面将具体看下AutoConfigurationImportSelector类的内容。看下它是如何将类进行自动化配置的。

 

AutoConfigurationImportSelector

AutoConfigurationImportSelector的集成关系为:

AutoConfigurationImportSelector ==> DeferredImportSelector ==> ImportSelector

顶级父类中有一个方法 selectImports

通过方法定义可以看出,此方法用于收集被@Configuration注解修饰的类,并返回该类的全限定名数组。那么继续看下在AutoConfigurationImportSelector中的具体实现

根据代码的具体实现,可以找到SpringFactoriesLoader类中的loadSpringFactories方法,该方法具体承担扫描承担自动化配置的配置类

其中声明的常量 FACTORIES_RESOURCE_LOCATION = "META-INF/spring.factories"。 标识从各个starter中读取META-INF下的spring.factories文件。以druid-spring-boot-starter为例

上述过程的调用链路如下图所示:

综上,我们知道了,springboot的自动化配置,是通过实现了ImportSelector接口的类,将各个starter中的自动化配置类收集起来,并加载到IOC容器中进行管理,以实现自动化配置的能力。其中还有更多的细节内容,大家可以自行探索。既然知道了,SpringBoot的自动化配置原理,那么我们也定义一个自己的Starter类来体验一下它的功能吧!

自定义Starter

自定义一个utils-starter项目,定义一个名为HelloWorld的置类

再定义一个工程,将自定义的utils-starter项目加入到maven依赖中

启动该类,可以看到 org.springframework.core.io.support.SpringFactoriesLoader#loadFactoryNames 方法返回的结果,已经将HelloWold配置类扫描到并返回了。该类已经加入到IOC容器的管理中,相应的HelloWorld中定义的SayHello也被加入到了IOC容器中,使用时只需要通过@Autowried注解引入即可。

通过单元测试类进行测试

至此,自定义Starter完成,后期可以根据需要,将常用的配置内容加入到自定义的Starter中,方便快速开发~

 

 

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值