SpringBoot-定義自己的auto-configuration
1.前言
Spring Boot內部定義了各種各樣的xxxAutoConfiguration配置類,預先定義好了各種所需的Bean。只有在特定的情況下這些配置類才會被起。 那我們如何定義一個自己的Configuration呢?順便了解一下原理?
2.那我們開始吧,哈哈哈
2.1 新建一個Maven工程
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-hello</artifactId>
<version>1.0-SNAPSHOT</version>
2.2 修改pom檔案
<?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>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-hello</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>1.4.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>1.4.3.RELEASE</version>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.3 建立HelloServiceProperties類,自動屬性配置類
package com.cxx.springboot.starter.hello;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
* User: lanxinghua
* Date: 2018/10/7 21:36
* Desc: hello 自動配置屬性類
*/
@ConfigurationProperties(prefix = "hello")
public class HelloServiceProperties {
private static final String MSG = "world";
private String msg = MSG;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
2.4 建立HelloService,服務類
package com.cxx.springboot.starter.hello;
/**
* User: lanxinghua
* Date: 2018/10/7 21:38
* Desc: 服務類
*/
public class HelloService {
private String msg;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String sayHello(){
return "hello" + msg;
}
}
2.5 建立HelloServiceAutoConfiguration,自動配置類
package com.cxx.springboot.starter.hello;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* User: lanxinghua
* Date: 2018/10/7 21:40
* Desc: 自動配置類
*/
@Configuration
@EnableConfigurationProperties(HelloServiceProperties.class)
@ConditionalOnClass(HelloService.class) //判斷該類在類路徑下是否存在
@ConditionalOnProperty(prefix = "hello", value = "ebabled", matchIfMissing = true)
public class HelloServiceAutoConfiguration {
@Autowired
private HelloServiceProperties helloServiceProperties;
@Bean
@ConditionalOnMissingBean(HelloService.class)
public HelloService helloService(){
HelloService helloService = new HelloService();
helloService.setMsg(helloServiceProperties.getMsg());
return helloService;
}
}
2.6 註冊配置
1、在src/main/resources新建META-INF資料夾
2、在META-INF資料夾下新建spring.factories檔案
3、註冊配置自動配置類
spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=
com.cxx.springboot.starter.hello.HelloServiceAutoConfiguration
2.7 將上面構建的starter安裝到本地
mvn clean install
3.使用自定義的Configuration
新建一個springboot專案,新增依賴
測試一下:
package com.example;
import com.cxx.springboot.starter.hello.HelloService;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
@SpringBootApplication
public class DesignsApplication {
@Resource
private HelloService helloService;
@RequestMapping("/test")
public String test(){
return helloService.sayHello();
}
public static void main(String[] args) {
SpringApplication.run(DesignsApplication.class, args);
}
}
相關文章
- 使用DialogFragment定義自己的DialogFragment
- 在jQuery定義自己函式jQuery函式
- 「模組化安裝」,定義你自己的CloudQueryCloud
- Android自己定義提示框Android
- 基於ng-alain定義自己的select元件AI元件
- mac CLion cmake 呼叫自己定義的標頭檔案Mac
- Laravel 5.4 如何向 IoC 容器中新增自己定義的類Laravel
- 使用Web Component定義自己的專屬網頁元件Web網頁元件
- 基於vue的Element-ui定義自己的select元件VueUI元件
- 後臺自己定義的配置引數,在模型裡怎麼呼叫?模型
- Android中常用介面卡及定義自己的介面卡Android
- 【Quick-COCOS2D-X 3.3 怎樣繫結自己定義類至Lua之三】動手繫結自己定義類至LuaUI
- 回形取數 (注意自己定義的變數是從幾開始的)變數
- SpringBoot-記Spring Boot
- "undefined reference to strptime"之自己定義strptime函式Undefined函式
- 自己動手封裝js工具類(JS中定義類的幾種方式)封裝JS
- 程式的定義
- Springboot-之定時任務,啟動執行任務Spring Boot
- SpringBoot-快速上手Spring Boot
- 介面模組的定義
- SOCKS代理的定義
- 想為Mac上的資料夾定義自己喜歡的顏色嗎?看這裡Mac
- 如何自定義自己的vue-cli模板Vue
- 自己對html字串轉義HTML字串
- SMART原則的定義和含義
- SpringBoot-配置檔案Spring Boot
- springBoot-啟動原理Spring Boot
- springboot-整合mybatis,securitySpring BootMyBatis
- Docker定製自己的環境映象Docker
- MFC自己的滑鼠Icon設定
- 重新思考AI的定義AI
- 如何定義良好的API?API
- 方法的定義面試題面試題
- 架構師的定義架構
- Swift 裡的巨集定義Swift
- 好程式碼的定義
- 軟體定義的=虛
- ICMP協議的定義協議