久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

快速開(kāi)發(fā)一個(gè)自定義 Spring Boot Starter ,,希望你也會(huì)

 壞尐孒95qanplv 2020-07-04


來(lái)源:jianshu.com/p/45538b44e04e

眾所周知,,Spring Boot由眾多Starter組成,,隨著版本的推移Starter家族成員也與日俱增。在傳統(tǒng)Maven項(xiàng)目中通常將一些層,、組件拆分為模塊來(lái)管理,,以便相互依賴復(fù)用,在Spring Boot項(xiàng)目中我們則可以創(chuàng)建自定義Spring Boot Starter來(lái)達(dá)成該目的,。

好,,開(kāi)始,先創(chuàng)建一個(gè)Maven項(xiàng)目并引入依賴,,pom.xml如下,,供參考~

<?xml version='1.0' encoding='UTF-8'?>
<project xmlns='http://maven./POM/4.0.0'
         xmlns:xsi='http://www./2001/XMLSchema-instance'
         xsi:schemaLocation='http://maven./POM/4.0.0 http://maven./xsd/maven-4.0.0.xsd'>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>example-spring-boot-starter</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <!-- Import dependency management from Spring Boot -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>1.5.2.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

這里說(shuō)下artifactId的命名問(wèn)題,Spring 官方 Starter通常命名為spring-boot-starter-{name}spring-boot-starter-web,, Spring官方建議非官方Starter命名應(yīng)遵循{name}-spring-boot-starter的格式,。

這里講一下我們的Starter要實(shí)現(xiàn)的功能,很簡(jiǎn)單,,提供一個(gè)Service,,包含一個(gè)能夠?qū)⒆址由锨昂缶Y的方法String wrap(String word)

public class ExampleService {

    private String prefix;
    private String suffix;

    public ExampleService(String prefix, String suffix) {
        this.prefix = prefix;
        this.suffix = suffix;
    }
    public String wrap(String word) {
        return prefix + word + suffix;
    }
}

前綴,、后綴通過(guò)讀取application.properties(yml)內(nèi)的參數(shù)獲得

@ConfigurationProperties('example.service')
public class ExampleServiceProperties {
    private String prefix;
    private String suffix;
    //省略 getter setter

重點(diǎn),,編寫AutoConfigure

@Configuration
@ConditionalOnClass(ExampleService.class)
@EnableConfigurationProperties(ExampleServiceProperties.class)
public class ExampleAutoConfigure {

    @Autowired
    private ExampleServiceProperties properties;

    @Bean
    @ConditionalOnMissingBean
    @ConditionalOnProperty(prefix = 'example.service',value = 'enabled',havingValue = 'true')
    ExampleService exampleService (){
        return  new ExampleService(properties.getPrefix(),properties.getSuffix());
    }

}

解釋下用到的幾個(gè)和Starter相關(guān)的注解:

  • @ConditionalOnClass,當(dāng)classpath下發(fā)現(xiàn)該類的情況下進(jìn)行自動(dòng)配置,。
  • @ConditionalOnMissingBean,,當(dāng)Spring Context中不存在該Bean時(shí)。
  • @ConditionalOnProperty(prefix = 'example.service',value = 'enabled',havingValue = 'true'),,當(dāng)配置文件中example.service.enabled=true時(shí),。

更多相關(guān)注解,建議閱讀官方文檔該部分,。

最后一步,,在resources/META-INF/下創(chuàng)建spring.factories文件,內(nèi)容供參考下面~

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.autocinfigure.ExampleAutoConfigure

OK,,完事,,運(yùn)行 mvn:install打包安裝,一個(gè)Spring Boot Starter便開(kāi)發(fā)完成了,。如果你需要該Starter的源代碼,,點(diǎn)這里。


創(chuàng)建一個(gè)Spring Boot項(xiàng)目來(lái) 試試~

引入example-spring-boot-starter依賴

 <dependency>
    <groupId>com.example</groupId>
    <artifactId>example-spring-boot-starter</artifactId>
    <version>1.0-SNAPSHOT</version>
 </dependency>

創(chuàng)建application.properties,進(jìn)行配置

example.service.enabled=true
example.service.prefix=####
example.service.suffix=@@@@

創(chuàng)建一個(gè)簡(jiǎn)單的Spring Web Application,,注入Starter提供的ExampleService看它能否正常工作~

@SpringBootApplication
@RestController
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Autowired
    private ExampleService exampleService;

    @GetMapping('/input')
    public String input(String word){
        return exampleService.wrap(word);
    }

}

啟動(dòng)Application,,訪問(wèn)/input接口試試看~


總結(jié)下Starter的工作原理

  1. Spring Boot在啟動(dòng)時(shí)掃描項(xiàng)目所依賴的JAR包,尋找包含spring.factories文件的JAR包
  2. 根據(jù)spring.factories配置加載AutoConfigure
  3. 根據(jù) @Conditional注解的條件,,進(jìn)行自動(dòng)配置并將Bean注入Spring Context

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多