溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

SpringBoot實(shí)現(xiàn)starter的方法

發(fā)布時(shí)間:2020-07-17 14:15:16 來(lái)源:億速云 閱讀:216 作者:小豬 欄目:編程語(yǔ)言

這篇文章主要講解了SpringBoot實(shí)現(xiàn)starter的方法,內(nèi)容清晰明了,對(duì)此有興趣的小伙伴可以學(xué)習(xí)一下,相信大家閱讀完之后會(huì)有幫助。

1、Mybatis 自定義配置的分析

在我們自定義starter之前我們寫了解一下Mybatis 是如何實(shí)現(xiàn)starter

在SpringBoot 引入的依賴如下:

  <dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.2</version>
  </dependency>

mybatis的maven 依賴,主要涉及到的內(nèi)容,spring.factories、MybatisAutoConfiguration、MybatisProperties

SpringBoot實(shí)現(xiàn)starter的方法

我們來(lái)看一下 META-INF/spring.factories文件,這個(gè)文件是以Map 形式存放的。key是EnableAutoConfiguration類的全類名,

value是一個(gè)MybatisAutoConfiguration,這就是當(dāng)項(xiàng)目啟動(dòng)自動(dòng)配置的類。

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration

MybatisAutoConfiguration

SpringBoot實(shí)現(xiàn)starter的方法

@Configuration //標(biāo)示是一個(gè)配置類

@ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class}) //表示當(dāng)SqlSessionFactory,SqlSessionFactoryBean存在這個(gè)配置類才生效。

@EnableConfigurationProperties({MybatisProperties.class}):就是把 MybatisProperties加入到 IOC 容器中。

MybatisProperties

SpringBoot實(shí)現(xiàn)starter的方法

對(duì)于@ConfigurationProperties注解它的作用就是把全局配置文件中的值綁定到實(shí)體類JavaBean上面(將配置文件中的值與MybatisProperties綁定起來(lái)),而@EnableConfigurationProperties主要是把以綁定值JavaBean加入到spring容器中。

分析完這些規(guī)則后,我們?cè)賮?lái)看看mybatis自定義的starter 的項(xiàng)目結(jié)構(gòu),主要是分為兩個(gè)項(xiàng)目(一個(gè)是空項(xiàng)目(mtbatis-spring-boot-starter),一個(gè)是具體的實(shí)現(xiàn)自定義配置的項(xiàng)目(mybatis-spring-boot-autoconfigure)),空項(xiàng)目只是引入自定義配置項(xiàng)目的依賴,而實(shí)現(xiàn)映入的時(shí)候我們只需要映入空項(xiàng)(mtbatis-spring-boot-starter)即可。

到此我們已經(jīng)分析完mybatis 自定義的starter,下面我們自己來(lái)實(shí)現(xiàn)一個(gè)自定義的starter。

2、自定義starter的實(shí)現(xiàn)

項(xiàng)目結(jié)構(gòu)展示:

SpringBoot實(shí)現(xiàn)starter的方法

首先我們先定義一個(gè) zfauto-spring-boot-autoconfigure 工程

編寫屬性類:添加 @ConfigurationProperties注解和前綴 zf.auto。之后我們就可以在 application.properties或application.yml 中 使用 zf.auto=指定參數(shù)了,由于篇幅的原因省略setter getter方法,實(shí)際是需要的,不然無(wú)法注入;

@ConfigurationProperties(prefix = "zf.auto")
public class HelloProperties {
  private String prefix;
  private String suffix;
}

編寫配置類:加入@Configuration注解,@ConditionalOnWebApplication是web 應(yīng)用配置類才起作用,以及 @EnableConfigurationProperties(HelloProperties.class) 注解,將屬性注入到 IOC 容器中。

@Configuration
@ConditionalOnWebApplication
@EnableConfigurationProperties(HelloProperties.class)
public class HelloServiceAutoConfiguration {
  @Autowired
  HelloProperties helloProperties;
  @Bean
  public HelloService helloService(){
    HelloService helloService=new HelloService();
    helloService.setHelloProperties(helloProperties);
    return helloService;
  }

}

編寫 spring.factories 文件:在resources路徑下面創(chuàng)建META-INF,文件夾,然后創(chuàng)建spring.factories文件

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.zfauto.starter.HelloServiceAutoConfiguration

然后我們?cè)趧?chuàng)建一個(gè)空項(xiàng)目(zfauto-spring-boot-starter),在這個(gè)項(xiàng)目中我們引入zfauto-spring-boot-autoconfigure依賴

<dependency>
    <groupId>com.zfauto.starter</groupId>
    <artifactId>zfauto-spring-boot-autoconfigure</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

HelloService 實(shí)現(xiàn)的功能,省略setter,getter的方法(實(shí)際需要)

public class HelloService {
  HelloProperties helloProperties;
  public String sayHello(String name){
    return helloProperties.getPrefix()+ ","+name+","+helloProperties.getSuffix();
  }
}

最后我們 分別將項(xiàng)目打包,由于zfauto-spring-boot-starter是依賴于zfauto-spring-boot-autoconfigure,所以我們先對(duì)zfauto-spring-boot-autoconfigure進(jìn)行打包,然后通過 mvn install 打到本地倉(cāng)庫(kù)(如何打包見下圖)。

SpringBoot實(shí)現(xiàn)starter的方法

到此我們自定義的類實(shí)現(xiàn)。那我們來(lái)測(cè)試一下,這個(gè)和我們引入其他的starter一樣了。

創(chuàng)建項(xiàng)目zfauto-spring-boot-starter-test ,引入自定義starter的依賴。

 <dependency>
     <groupId>com.zfauto.starter</groupId>
     <artifactId>zfauto-spring-boot-starter</artifactId>
     <version>0.0.1-SNAPSHOT</version>
</dependency>

application.properties中的配置如下

zf.auto.prefix=hello

zf.auto.suffix=123

具體的測(cè)試類

@RestController
public class HelloController {
  @Autowired
  HelloService helloService;
  @RequestMapping("/sayHello")
  public String sayHello(){
    return helloService.sayHello("小福子");
  }
}

項(xiàng)目訪問路徑:http://localhost:8080/sayHello

SpringBoot實(shí)現(xiàn)starter的方法

看完上述內(nèi)容,是不是對(duì)SpringBoot實(shí)現(xiàn)starter的方法有進(jìn)一步的了解,如果還想學(xué)習(xí)更多內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI