springboot自動裝配簡述

自動裝配原理

使用方式

springboot組件中,starter組件都已經(jīng)封裝好了,ioc容器中已經(jīng)有了,開箱即用

組件類型

spring官方的項(xiàng)目 spring-boot-starter-xxx 如web/test...
自定義提供的組件 xxx-spring-boot-starter 如mybatis,dubbo

思考

spring ioc容器中已有,
肯定是已經(jīng)加載了該類,
要么是注入的類中直接使用了注解,ioc掃描到加載;要么就是使用了xml/configuration/import等注解間接加載進(jìn)來。spring大概就這么幾種加載方式
spring中使用import的方式,通過enable方式自動裝配。

實(shí)現(xiàn)方式

  • 1.@EnableAutoConfiguration
    這個注解就聲明在@SpringBootApplication中,這個注解就是把組件相關(guān)的Bean加載到ioc容器中

  • 2.進(jìn)去發(fā)現(xiàn)@Import注解
    @Import(AutoConfigurationImportSelector.class)
    這個注解會加載一個配置類,解析配置加載需要的類;這個注解中需要指定配置類,配置類實(shí)現(xiàn)了ImportSelector接口,實(shí)現(xiàn)selectImports(),該方法返回一個數(shù)組,數(shù)組是需要被加載的類。
    @AutoConfigurationPackage
    這個注解是把使用了該注解的類所在的包及子包下所有組件掃描到ioc容器中

springboot中的實(shí)現(xiàn)

實(shí)現(xiàn)沒有走AutoConfigurationImportSelector中的selectImports(),而是用到了springFactoriesLoader,springFactoriesLoader類似java中的spi,是spring內(nèi)部約定俗成的加載方式,掃描classpath下的META-INF/spring.factories文件,其中是k-v配置,k就是EnableAutoConfiguration,v就是多個配置類,也就是需要自動裝配的配置類
springfactoriesLoader配置文件如:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\.....\org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration

需要自動裝配的配置類如:

RabbitAutoConfiguration,是一個基于javaConfig形式的配置類
@Configuration(proxyBeanMethods=false)
@ConfitionOnClass({RabbitTemplate.calss,Channel.calss})
@EnableConfigurationProperties(RabbitProperties.class)
@Import(RabbitAnnotationDrivenConfiguration.calss)
public class RabbitAutoConfiguration

用到了幾個新注解

  • ConditionOnClass
    根據(jù)條件裝配,這是@Conditional在springboot中的新注解,還有如@ConditionOnBean/OnMissingBean/OnProperty/OnResource...
    意思在有這個bean時才加載,因?yàn)閟tarter組件一般不是重復(fù)造輪子,而是再次封裝已有的組件進(jìn)行自動裝配,所以如果沒有加載成功需要的核心類,就沒必要裝載starter的配置類。
  • @EnableConfigurationProperties
    這個注解指定組件的配置文件,使用了java類配置,一般這個java類會使用@ConfigurationProperties,注解會把當(dāng)前類下的屬性和配置文件中的配置進(jìn)行綁定(如application.properies),所以引用了組件,配置文件寫在主配置文件中既可以讀取、啟動。

使用自動裝配的組件

  • 引入maven依賴
  • 配置需要的屬性
  • 直接注入使用
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容