成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【Java入門】SpringBoot自動配置原理

468122151 / 2874人閱讀

摘要:作者譚淼一運行原理的運行是由注解提供的。完成自動配置類。自動配置類主要作用是的配置核心,它會寫在中,告知在啟動時去讀取該類并根據(jù)該類的規(guī)則進行配置。會檢測是否存在類類會查看是否開啟該自動配置。

作者:譚淼

一、運行原理

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

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({EnableAutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
    String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
 
    Class[] exclude() default {};
 
    String[] excludeName() default {};
}

這里的關(guān)鍵功能是@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文件的部分內(nèi)容。

# Initializers
org.springframework.context.ApplicationContextInitializer=
org.springframework.boot.autoconfigure.SharedMetadataReaderFactoryContextInitializer,
org.springframework.boot.autoconfigure.logging.AutoConfigurationReportLoggingInitializer
 
# Application Listeners
org.springframework.context.ApplicationListener=
org.springframework.boot.autoconfigure.BackgroundPreinitializer
 
# Auto Configuration Import Listeners
org.springframework.boot.autoconfigure.AutoConfigurationImportListener=
org.springframework.boot.autoconfigure.condition.ConditionEvaluationReportAutoConfigurationImportListener
 
# Auto Configuration Import Filters
org.springframework.boot.autoconfigure.AutoConfigurationImportFilter=
org.springframework.boot.autoconfigure.condition.OnClassCondition
 
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,
org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,
org.springframework.boot.autoconfigure.cloud.CloudAutoConfiguration,
org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration,

里面的類都是自動配置類,SpringBoot會根據(jù)這些自動配置類去自動配置環(huán)境。

下面我們就自動動手寫一個starter。

二、自定義Starter

首先先介紹幾個條件注解。

@ConditionalOnBean:當(dāng)容器里有指定的Bean為true

@ConditionalOnClass:當(dāng)類路徑下有指定的類為true

@ConditionalOnMissingBean:當(dāng)容器里沒有指定的Bean為true

@ConditionalOnProperty:指定的數(shù)據(jù)是否有指定的值

...

了解了條件注解后,我們開始自定義Starter。

1、在自定義Starter之前先要在Maven中填寫依賴。



   4.0.0
 
   cn.miaolovezhen
   spring-boot-starter-test
   0.0.1-SNAPSHOT
   jar
 
   spring-boot-starter-test
   Demo project for Spring Boot
 
   
      org.springframework.boot
      spring-boot-starter-parent
      1.5.6.RELEASE
       
   
 
   
      UTF-8
      UTF-8
      1.8
   
 
   
      
         org.springframework.boot
         spring-boot-autoconfigure
         1.5.4.RELEASE
      
   
 

2、完成TestProperties類,這個類定義了默認(rèn)的屬性值,如該類中,只有一個屬性值msg,默認(rèn)為world。@ConfigurationProperties注解會定義一個匹配,如果想修改屬性值,可以在application.properties中使用“匹配.屬性=修改的值”進行修改。如test.msg = tan

@ConfigurationProperties(prefix = "test")
public class TestProperties {
    private static final String MSG = "springboot";
    private String msg = MSG;
 
    public String getMsg() {
        return msg;
    }
 
    public void setMsg(String msg) {
        this.msg = msg;
    }
}

3、完成服務(wù)類。服務(wù)類是指主要的功能類,如果沒有SpringBoot,這些服務(wù)類在Spring中都是需要自己去配置生成的。如SpringMVC中的DispatcherServlet、Mybatis的DataSource等。

public class TestService {
    private String msg;
 
    public String sayHello(){
        return "Hello " + msg;
    }
 
    public String getMsg() {
        return msg;
    }
 
    public void setMsg(String msg) {
        this.msg = msg;
    }
}

4、完成自動配置類。自動配置類主要作用是SpringBoot的配置核心,它會寫在MEAT-INF/spring.factories中,告知SpringBoot在啟動時去讀取該類并根據(jù)該類的規(guī)則進行配置。

@EnableConfigurationProperties注解根據(jù)TestProperties類開啟屬性注入,允許在application.properties修改里面的屬性值。

@ConditionOnClass會檢測是否存在TestService類

@ConditionOnProperty類會查看是否開啟該自動配置。默認(rèn)開啟(true)。

@ConditionOnMissingBean會檢測容器中是否有TestService類的對象,如果沒有則生成一個。

@Configuration
@EnableConfigurationProperties(TestProperties.class)
@ConditionalOnClass(TestService.class)
@ConditionalOnProperty(prefix = "test" , value = "enabled" , matchIfMissing = true)
public class TestServiceAutoConfiguration {
    @Autowired
    TestProperties testProperties;
 
    @Bean
    @ConditionalOnMissingBean(TestService.class)
    public TestService testService(){
        TestService testService = new TestService();
        testService.setMsg(testProperties.getMsg());
        return testService;
    }
}

5、最后一步,不要忘記在在MEAT-INF文件夾中創(chuàng)建spring.factories文件。內(nèi)容很簡單,告訴SpringBoot去讀取TestServiceAutoConfiguration類。

org.springframework.boot.autoconfigure.EnableAutoConfiguration=
cn.miaolovezhen.TestServiceAutoConfiguration

好啦,搞定!下面可以使用maven install命令把starter存到本地,其他SpringBoot項目需要使用這個starter,直接導(dǎo)入就可以啦。

?

參考:《java EE開發(fā)的顛覆者:springboot實戰(zhàn)》

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/72832.html

相關(guān)文章

  • SpringBoot自動配置原理

    摘要:開啟自動配置功能后文詳解這個注解,學(xué)過的同學(xué)應(yīng)該對它不會陌生,就是掃描注解,默認(rèn)是掃描當(dāng)前類下的。簡單來說,這個注解可以幫助我們自動載入應(yīng)用程序所需要的所有默認(rèn)配置。簡單理解這二者掃描的對象是不一樣的。 前言 只有光頭才能變強。 文本已收錄至我的GitHub倉庫,歡迎Star:https://github.com/ZhongFuCheng3y/3y 回顧前面Spring的文章(以學(xué)習(xí)...

    Rainie 評論0 收藏0
  • SpringBoot基礎(chǔ)入門

    摘要:基礎(chǔ)入門篇簡介可以基于輕松創(chuàng)建可以運行的獨立的生產(chǎn)級的應(yīng)用程序。對平臺和第三方類庫我們有自己看法和意見約定大于配置。官網(wǎng)目前最新版本是我們接下來就在這個版本的基礎(chǔ)上面進行學(xué)習(xí)。變成項目引入依賴。 SpringBoot基礎(chǔ)入門篇 簡介 Spring Boot可以基于Spring輕松創(chuàng)建可以運行的、獨立的、生產(chǎn)級的應(yīng)用程序。 對Spring平臺和第三方類庫我們有自己看法和意見(約定大于配置...

    Edison 評論0 收藏0
  • spring boot - 收藏集 - 掘金

    摘要:引入了新的環(huán)境和概要信息,是一種更揭秘與實戰(zhàn)六消息隊列篇掘金本文,講解如何集成,實現(xiàn)消息隊列。博客地址揭秘與實戰(zhàn)二數(shù)據(jù)緩存篇掘金本文,講解如何集成,實現(xiàn)緩存。 Spring Boot 揭秘與實戰(zhàn)(九) 應(yīng)用監(jiān)控篇 - HTTP 健康監(jiān)控 - 掘金Health 信息是從 ApplicationContext 中所有的 HealthIndicator 的 Bean 中收集的, Spring...

    rollback 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<