歡迎您光臨本站 註冊首頁

SpringBoot如何實現starter原理詳解

←手機掃碼閱讀     limiyoyo @ 2020-06-10 , reply:0

     1、Mybatis 自定義配置的分析        

在我們自定義starter之前我們寫了解一下Mybatis 是如何實現starter

在SpringBoot 引入的依賴如下:

    org.mybatis.spring.bootmybatis-spring-boot-starter2.1.2

   

mybatis的maven 依賴,主要涉及到的內容,spring.factories、MybatisAutoConfiguration、MybatisProperties

   

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

value是一個MybatisAutoConfiguration,這就是當項目啟動自動配置的類。

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

     MybatisAutoConfiguration        

   

@Configuration //標示是一個配置類

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

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

     MybatisProperties        

   

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

分析完這些規則後,我們再來看看mybatis自定義的starter 的項目結構,主要是分為兩個項目(一個是空項目(mtbatis-spring-boot-starter),一個是具體的實現自定義配置的項目(mybatis-spring-boot-autoconfigure)),空項目只是引入自定義配置項目的依賴,而實現映入的時候我們只需要映入空項(mtbatis-spring-boot-starter)即可。

到此我們已經分析完mybatis 自定義的starter,下面我們自己來實現一個自定義的starter。

     2、自定義starter的實現        

項目結構展示:

   

首先我們先定義一個 zfauto-spring-boot-autoconfigure 工程    
   

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

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

   

編寫配置類:加入@Configuration註解,@ConditionalOnWebApplication是web 應用配置類才起作用,以及 @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路徑下面創建META-INF,文件夾,然後創建spring.factories文件

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

然後我們在創建一個空項目(zfauto-spring-boot-starter),在這個項目中我們引入zfauto-spring-boot-autoconfigure依賴

  com.zfauto.starterzfauto-spring-boot-autoconfigure0.0.1-SNAPSHOT

   

HelloService 實現的功能,省略setter,getter的方法(實際需要)

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

   

最後我們 分別將項目打包,由於zfauto-spring-boot-starter是依賴於zfauto-spring-boot-autoconfigure,所以我們先對zfauto-spring-boot-autoconfigure進行打包,然後通過 mvn install 打到本地倉庫(如何打包見下圖)。

   

到此我們自定義的類實現。那我們來測試一下,這個和我們引入其他的starter一樣了。

創建項目zfauto-spring-boot-starter-test ,引入自定義starter的依賴。

   com.zfauto.starterzfauto-spring-boot-starter0.0.1-SNAPSHOT

   

application.properties中的配置如下

zf.auto.prefix=hello

zf.auto.suffix=123

具體的測試類

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

   

項目訪問路徑:http://localhost:8080/sayHello

   



[limiyoyo ] SpringBoot如何實現starter原理詳解已經有227次圍觀

http://coctec.com/docs/java/show-post-237933.html