springboot 自定義一個簡單的 starter
阿新 • • 發佈:2018-11-04
1.新建專案 。
啟動器只用來做依賴匯入;
專門來寫一個自動配置模組;
idea 下建立空專案 hello-spring-boot-starter 新增兩個子模組
spring-boot-starter-autoconfigurer,
spring-boot-starter-helloworld。
autoconfigurer 自動配置模組,
<!--引入starter的基本配置--> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> </dependencies>
helloworld,使用的模組,該模組使用autoconfigurer
<dependencies> <dependency> <groupId>com.ccu.hello</groupId> <artifactId>spring-boot-starter-autoconfigurer</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies>
2,需要一個配置類,配置類需要提供好裝配好的類
載入的配置檔案的類
@ConfigurationProperties(prefix = "atguigu.hello") public class HelloProperties { private String prefix; private String suffix; public String getPrefix() { return prefix; } public void setPrefix(String prefix) { this.prefix = prefix; } public String getSuffix() { return suffix; } public void setSuffix(String suffix) { this.suffix = suffix; } }
配置類 需納入spring容器中
@Configuration
@ConditionalOnWebApplication //web應用才生效
@EnableConfigurationProperties(HelloProperties.class)
public class HelloServiceAutoConfiguration {
@Autowired
HelloProperties helloProperties;
@Bean
public HelloService helloService(){
HelloService service = new HelloService();
service.setHelloProperties(helloProperties);
return service;
}
}
完成功能的類
public class HelloService {
HelloProperties helloProperties;
public HelloProperties getHelloProperties() {
return helloProperties;
}
public void setHelloProperties(HelloProperties helloProperties) {
this.helloProperties = helloProperties;
}
public String sayHellAtguigu(String name){
return helloProperties.getPrefix()+"‐" +name + helloProperties.getSuffix();
}
}
3自動裝配(關鍵)
在classpath下:META-INF/spring.factories配置
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.ccu.hello.springbootstarterautoconfigurer.HellloAutoConfiguration
最後使用idea maven 打包。
在新建一個專案匯入依賴即可
加入properties.yml配置項
hello:
prefix: xiaozi
suffer: nihaoqiang
定義controller訪問
@Controller
public class HelloController {
@Autowired
private SayService sayService;
@RequestMapping("/say/hello")
@ResponseBody
public String say(){
return sayService.sayHello("haoren");
}
}
最終效果
一個簡單的starter 就完成了。