欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

spring boot微服務(wù)自定義starter原理詳解

 更新時(shí)間:2019年12月16日 14:35:01   作者:zhjh256  
這篇文章主要介紹了spring boot微服務(wù)自定義starter原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

這篇文章主要介紹了spring boot微服務(wù)自定義starter原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

使用spring boot開(kāi)發(fā)微服務(wù)后,工程的數(shù)量大大增加(一定要按照領(lǐng)域來(lái)切,不要一個(gè)中間件客戶(hù)端包一個(gè)),讓各個(gè)jar從開(kāi)發(fā)和運(yùn)行時(shí)自包含成了一個(gè)重要的內(nèi)容之一。spring boot starter就可以用來(lái)解決該問(wèn)題(沒(méi)事啟動(dòng)時(shí)別依賴(lài)于applicationContext.getBean獲取bean進(jìn)行處理,依賴(lài)關(guān)系太折騰,有時(shí)候在復(fù)雜系統(tǒng)中解決此事比較麻煩,需要修改開(kāi)源框架代碼才能實(shí)現(xiàn),反過(guò)來(lái)修改開(kāi)源源碼后,維護(hù)也是個(gè)麻煩事)。言歸正傳,說(shuō)說(shuō)自定義starter。首先請(qǐng)熟悉spring boot的核心理念,不然容易為了starter而starter,這種情況太多了。

創(chuàng)建一個(gè)maven項(xiàng)目,在pom文件中添加如下依賴(lài):

<dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-autoconfigure</artifactId>
      <version>2.0.0.RELEASE</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>

創(chuàng)建properties屬性類(lèi),用于讀取屬性(當(dāng)然可選,如果一開(kāi)始沒(méi)有按照spring boot autoconfig的套路來(lái),改起來(lái)還是挺費(fèi)勁的,但是一旦這么做了,就會(huì)想,TMD這才是真正的開(kāi)發(fā)模式,@Value那套早該丟了)。

@ConfigurationProperties(prefix = "com.xxx")
public class HelloServiceProperties {

  private String name = "james";

  private String hobby = "cc";

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getHobby() {
    return hobby;
  }

  public void setHobby(String hobby) {
    this.hobby = hobby;
  }
}

@ConfigurationProperties配置此注解可以自動(dòng)導(dǎo)入application.properties配置文件中的屬性,前提需要指定屬性前綴prefix。

3.創(chuàng)建配置類(lèi)

public class HelloService {

  private String name;

  private String hobby;

  public String getName() {
    return "name is " + name;
  }

  public String getHobby() {
    return "hobby is " + hobby;
  }

  public void setName(String name) {
    this.name = name;
  }

  public void setHobby(String hobby) {
    this.hobby = hobby;
  }
}

4.創(chuàng)建自動(dòng)配置類(lèi):

@Configuration
@EnableConfigurationProperties(HelloServiceProperties.class)
@ConditionalOnClass(HelloServiceConfiguration.class)
@ConditionalOnProperty(prefix = "com.xxx", value = "enabled", matchIfMissing = true)@ComponentScan({"com.xxx"}) // 如果bean比較多,一般采用這種方式
public class HelloServiceAutoConfiguration {

  @Autowired
  private HelloServiceProperties helloServiceProperties;

  @Bean // bean比較少、且順序和邏輯有特殊要求的模塊,一般采用這種方式
  @ConditionalOnMissingBean(HelloServiceConfiguration.class)
  public HelloServiceConfiguration helloServiceConfiguration() {
    HelloService helloService = new HelloService();
    helloService.setName(helloServiceProperties.getName());
    helloService.setHobby(helloServiceProperties.getHobby());
    return helloService;
  }
}

5.在resources文件夾下面新建一個(gè)META-INF文件,并在下面創(chuàng)建spring.factories文件,將4中的配置類(lèi)進(jìn)行注冊(cè)。

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.xxx.HelloServiceAutoConfiguration

6.新建一個(gè)springboot項(xiàng)目,在pom文件中添加剛剛打包的jar的坐標(biāo)。

7.使用@Autowired訪問(wèn)接口。

@SpringBootApplication
@RestController
public class Springboot03Application {

  @Autowired
  private HelloService helloService;

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

  @RequestMapping("/name")
  public String getName() {
    return helloService.getName();
  }

  @RequestMapping("/hobby")
  public String getHobby() {
    return helloService.getHobby();
  }
}

相比原來(lái)要使用@Import注解導(dǎo)入一個(gè)@Configuration類(lèi),或者在一處集中維護(hù)ComponentScan的所有路徑,使用autoconfigure starter可以讓?xiě)?yīng)用明顯實(shí)現(xiàn)的更加自包含和解耦。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論