自定義視圖和自定義Starter做成統一配置,友善使用。
(一)自定義視圖映射
在項目開發過程中,經常會涉及頁面跳轉問題,而且這個頁面跳轉沒有任何業務邏輯過程,隻是單純的路由過程 ( 例如:點選一個按鈕跳轉到一個頁面 ) 。
@RequestMapping("/testmvc") public String view(){ return "abc"; }
現在隻需要這樣統一寫,此類必須在啟動類所在包或者子包中
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter{
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/testmvc").setViewName("/abc");
}
}
頁面:abc.flt 或者 abc.html
通路http://localhost:8081/testmvc 即可通路到這個abc.flt檔案]
hello
(二)自定義Starter
在我們學習SpringBoot時都已經了解到starter是SpringBoot的核心組成部分,SpringBoot為我們提供了盡可能完善的封裝,提供了一系列的自動化配置的starter插件,我們在使用spring-boot-starter-web時隻需要在pom.xml配置檔案内添加依賴就可以了,我們之前傳統方式則是需要添加很多相關SpringMVC配置檔案。而spring-boot-starter-web為我們提供了幾乎所有的預設配置,很好的降低了使用架構時的複雜度。是以在使用xx.starter時你就不用考慮該怎麼配置,即便是有一些必要的配置在application.properties配置檔案内對應配置就可以了,那好,為什麼我在application.properties配置對應屬性後xx.starter就可以擷取到并作出處理呢?下面我們帶着這個疑問來編寫我們自定義的starter讓我們深入了解SpringBoot。
- 建立自己的starter項目
建立【普通maven項目】,修改pom.xml,增加自動配置依賴
org.springframework.boot
spring-boot-autoconfigure
1.5.10.RELEASE
我們這個starter并不做其他複雜邏輯的編寫,是以這裡的依賴隻是添加了spring-boot-autoconfigure,實戰開發時可以添加任意依賴到項目中。
- 配置映射參數實體
starter是如何讀取application.properties或者application.yml配置檔案内需要的配置參數的呢?那麼接下來我們就看看如何可以擷取自定義的配置資訊。
SpringBoot在處理這種事情上早就已經考慮到了,是以提供了一個注解@ConfigurationProperties,該注解可以完成将application.properties配置檔案内的有規則的配置參數映射到實體内的field内,不過需要提供setter方法,自定義配置參數實體代碼如下所示
@ConfigurationProperties(prefix = "hello")public class HelloProperties{ private String msg = "test"; public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; }}
在上面代碼中,@ConfigurationProperties注解内我們使用到了屬性preffix,該屬性配置了讀取參數的字首,根據上面的實體屬性對應配置檔案内的配置則是hello.msg,當然我們提供了預設值,配置檔案内不進行配置時則是使用預設值。
- 編寫自定義業務
自定義starter提供一個Service,并且提供一個名為sayHello的方法用于傳回我們配置的msg内容。
public class HelloService{ private String msg; public String sayHello(){ return msg; } public void setMsg(String msg) { this.msg = msg; }}
Service内的代碼比較簡單,根據屬性參數進行傳回格式化後的字元串。
接下來我們開始編寫自動配置,這一塊是starter的核心部分,配置該部分後在啟動項目時才會自動加載配置,當然其中有很多細節性質的配置。
- 實作自動化配置
自動化配置其實隻是提供實體bean的驗證以及初始
@Configuration//開啟配置
@EnableConfigurationProperties(HelloProperties.class)//開啟使用映射實體對象
@ConditionalOnClass(HelloService.class)//存在HelloService時初始化該配置類
@ConditionalOnProperty//存在對應配置資訊時初始化該配置類
(
prefix = "hello