5.springboot自定義starter

  • starter是SpringBoot的核心組成部分,在starter中springboot為我們提供了很多的默認(rèn)封裝乙嘀,同時(shí)提供了可擴(kuò)展性的節(jié)點(diǎn)。我們?cè)谑褂玫臅r(shí)候,可以使用默認(rèn)的封裝委造,或者在application.properties配置文件中自己定義,這樣就能實(shí)現(xiàn)靈活的運(yùn)用均驶,接下來(lái)我們就來(lái)自定義starter并且通過spring-boot-autoconfigure完成自動(dòng)化配置昏兆。
  • 先熟悉springboot提供的一些列條件注解:
@ConditionalOnBean:當(dāng)SpringIoc容器內(nèi)存在指定Bean的條件 
@ConditionalOnClass:當(dāng)SpringIoc容器內(nèi)存在指定Class的條件 
@ConditionalOnExpression:基于SpEL表達(dá)式作為判斷條件 
@ConditionalOnJava:基于JVM版本作為判斷條件 
@ConditionalOnJndi:在JNDI存在時(shí)查找指定的位置 
@ConditionalOnMissingBean:當(dāng)SpringIoc容器內(nèi)不存在指定Bean的條件 
@ConditionalOnMissingClass:當(dāng)SpringIoc容器內(nèi)不存在指定Class的條件 
@ConditionalOnNotWebApplication:當(dāng)前項(xiàng)目不是Web項(xiàng)目的條件 
@ConditionalOnProperty:指定的屬性是否有指定的值 
@ConditionalOnResource:類路徑是否有指定的值 
@ConditionalOnSingleCandidate:當(dāng)指定Bean在SpringIoc容器內(nèi)只有一個(gè),或者雖然有多個(gè)但是指定首選的Bean 
@ConditionalOnWebApplication:當(dāng)前項(xiàng)目是Web項(xiàng)目的條件

一妇穴、創(chuàng)建maven項(xiàng)目導(dǎo)入自動(dòng)配置依賴

  • 這里只是添加了spring-boot-autoconfigure爬虱,可以根據(jù)自己封裝的業(yè)務(wù)內(nèi)容進(jìn)行添加
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.qiu</groupId>
    <artifactId>hello</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
            <version>2.0.0.RELEASE</version>
        </dependency>
    </dependencies>
</project>

二隶债、自定義業(yè)務(wù)所需要的默認(rèn)操作

  • @ConfigurationProperties注解內(nèi)我們使用到了屬性preffix,該屬性配置了讀取參數(shù)的前綴跑筝,根據(jù)上面的實(shí)體屬性對(duì)應(yīng)配置文件內(nèi)的配置則是hello.message死讹、hello.show,當(dāng)然我們提供了默認(rèn)值曲梗,配置文件內(nèi)不進(jìn)行配置時(shí)則是使用默認(rèn)值赞警。
//配置默認(rèn)的參數(shù)實(shí)體類
@ConfigurationProperties(prefix = "hello")
public class HelloProperties {
    //消息內(nèi)容
    private String message = "hello world";
    //是否顯示消息內(nèi)容
    private boolean show = true;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public boolean isShow() {
        return show;
    }

    public void setShow(boolean show) {
        this.show = show;
    }
}

三、編寫自定義的業(yè)務(wù)

//自定義的業(yè)務(wù)類
public class HelloService {
    //消息內(nèi)容
    private String message;
    //是否顯示消息內(nèi)容
    private boolean show ;

    public String sayHello()
    {
        return show ? "Hello虏两," + message : "Hidden";
    }


    public void setMessage(String message) {
        this.message = message;
    }

    public void setShow(boolean show) {
        this.show = show;
    }
}

四愧旦、自定義starter自動(dòng)化配置

@Configuration//開啟配置
@EnableConfigurationProperties(HelloProperties.class)//開啟使用映射實(shí)體對(duì)象
@ConditionalOnClass(HelloService.class)//存在HelloService時(shí)初始化該配置類
public class HelloAutoConfiguration {
    //application.properties配置文件映射前綴實(shí)體對(duì)象
    @Autowired
    private HelloProperties helloProperties;

    /**
     * 根據(jù)條件判斷不存在HelloService時(shí)初始化新bean到SpringIoc
     * @return
     */
    @Bean//創(chuàng)建HelloService實(shí)體bean
    @ConditionalOnMissingBean(HelloService.class)//缺失HelloService實(shí)體bean時(shí),初始化HelloService并添加到SpringIoc
    public HelloService helloService()
    {
        System.out.println(">>>The HelloService Not Found定罢,Execute Create New Bean.");
        HelloService helloService = new HelloService();
        helloService.setMessage(helloProperties.getMessage());//設(shè)置消息內(nèi)容
        helloService.setShow(helloProperties.isShow());//設(shè)置是否顯示
        return helloService;
    }
}

五忘瓦、自定義spring.factories

  • 在src/main/resource目錄下創(chuàng)建META-INF目錄,并在目錄內(nèi)添加文件spring.factories

//配置自定義Starter的自動(dòng)化配置
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.qiu.hello.HelloAutoConfiguration

六引颈、另一個(gè)項(xiàng)目中進(jìn)行測(cè)試

  • 先進(jìn)行打包:步驟:工具右側(cè) -> Maven Projects -> Lifecycle -> install耕皮,然后在另一個(gè)項(xiàng)目中引入

        <!--自定義starter依賴-->
        <dependency>
            <groupId>com.qiu</groupId>
            <artifactId>hello</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
  • 開啟項(xiàng)目


    打印出自建starter中的數(shù)據(jù)
  • 自測(cè):
@RestController
public class HelloController
{
    //注入自定義starter內(nèi)邏輯
    @Autowired
    HelloService helloService;

    /**
     * 測(cè)試訪問地址/hello
     * @return 格式化字符串
     */
    @RequestMapping(value = "/hello")
    public String sayHello()
    {
        return helloService.sayHello();
    }
}

返回:Hello,hello world

  • 在applicationh.properties配置文件中配置后再進(jìn)行測(cè)試

參考:https://blog.csdn.net/weixin_42033269/article/details/80026078?utm_source=blogxgwz0

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蝙场,一起剝皮案震驚了整個(gè)濱河市凌停,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌售滤,老刑警劉巖罚拟,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異完箩,居然都是意外死亡赐俗,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門弊知,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)阻逮,“玉大人,你說(shuō)我怎么就攤上這事秩彤∈宥螅” “怎么了?”我有些...
    開封第一講書人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵漫雷,是天一觀的道長(zhǎng)瓜富。 經(jīng)常有香客問我,道長(zhǎng)降盹,這世上最難降的妖魔是什么与柑? 我笑而不...
    開封第一講書人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上价捧,老公的妹妹穿的比我還像新娘每辟。我一直安慰自己,他們只是感情好干旧,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開白布渠欺。 她就那樣靜靜地躺著,像睡著了一般椎眯。 火紅的嫁衣襯著肌膚如雪挠将。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,806評(píng)論 1 290
  • 那天编整,我揣著相機(jī)與錄音舔稀,去河邊找鬼。 笑死掌测,一個(gè)胖子當(dāng)著我的面吹牛内贮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播汞斧,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼夜郁,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了粘勒?” 一聲冷哼從身側(cè)響起竞端,我...
    開封第一講書人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎庙睡,沒想到半個(gè)月后事富,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡乘陪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年统台,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片啡邑。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡贱勃,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谣拣,到底是詐尸還是另有隱情募寨,我是刑警寧澤,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布森缠,位于F島的核電站,受9級(jí)特大地震影響仪缸,放射性物質(zhì)發(fā)生泄漏贵涵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望宾茂。 院中可真熱鬧瓷马,春花似錦、人聲如沸跨晴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)端盆。三九已至怀骤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間焕妙,已是汗流浹背蒋伦。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留焚鹊,地道東北人痕届。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像末患,于是被迫代替她去往敵國(guó)和親研叫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348