SpringBoot自動配置xxxAutoConfiguration 的使用


https://sdqali.in/blog/2016/07/16/controlling-redis-auto-configuration-for-spring-boot-session/

常用的類:

@ConditionalOnProperty(name = "use.redis.session.store", havingValue = "true")
@ConditionalOnClass(Session.class)
@AutoConfigureAfter(RedisAutoConfiguration.class)
@ConditionalOnWebApplication
@ConditionalOnMissingBean(RedisHttpSessionConfiguration.class)
@SpringBootApplication(exclude ={SessionAutoConfiguration.class})

 

 

舉例:以MybatisAutoConfiguration為例
1. 在jar包中/META-INF/spring.factories中配置
org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration
spring在啟動時會去自動加載這個bean

2. MybatisAutoConfiguration.java上加上@Configuration

3. 如果需要通過自定義構造函數來構造bean,則加上構造函數

public MybatisAutoConfiguration(MybatisProperties properties,
                                  ObjectProvider<Interceptor[]> interceptorsProvider,
                                  ResourceLoader resourceLoader,
                                  ObjectProvider<DatabaseIdProvider> databaseIdProvider,
                                  ObjectProvider<List<ConfigurationCustomizer>> configurationCustomizersProvider) {
    this.properties = properties;
    this.interceptors = interceptorsProvider.getIfAvailable();
    this.resourceLoader = resourceLoader;
    this.databaseIdProvider = databaseIdProvider.getIfAvailable();
    this.configurationCustomizers = configurationCustomizersProvider.getIfAvailable();
}

 

構造函數中依賴的Bean,Spring會自動從Spring beanFactory容器中去找到適配的bean來傳入

參數:
MybatisProperties properties --> 依賴MybatisProperties 這個bean,而MybatisProperties 是一個@ConfigurationProperties。則加上@EnableConfigurationProperties(MybatisProperties.class),讓bean MybatisProperties 先加載
ObjectProvider<Interceptor[]> interceptorsProvider --> 依賴 org.apache.ibatis.plugin.Interceptor[],但又不確定 Interceptor 的bean是否存在,則通過ObjectProvider<Interceptor[]> 去獲取,interceptorsProvider.getIfAvailable()
ResourceLoader resourceLoader --> 依賴 bean ResourceLoader,直接在 Spring 容器中找到相應的 bean
ObjectProvider<DatabaseIdProvider> databaseIdProvider --> 同上
ObjectProvider<List<ConfigurationCustomizer>> configurationCustomizersProvider --> 同上

 

附:斷點打在MybatisAutoConfiguration 的構造函數上,查看調用棧,便可以看出端倪


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM