2.spring boot熱啟動,autowired自動載入,value註解,屬性注入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<version>1.5.9.RELEASE</version>
<optional>true</optional>
</dependency >
注意這裡的version版本要跟你的springboot版本一致。
2. AutoWired自動載入
以下程式碼都是虛擬碼,僅用於理解演示
在spring中是非常有用的,當我們配置好bean後,可以通過AutoWired註解自動載入到我們類庫裡邊。
然後我們對該註解做一個簡單的演示:
假設我們要做一個快取。
用於演示現在專案裡面建立一個Service就形成了以下目錄結構:
CacheService.java
package com.daxiong.service;
import org.springframework.stereotype.Service;
@Service
public class CacheService {
public String getCache(String key){
return "得到快取";
}
}
我們在Service類上加上@Service( 或Component均可) 這個你開心就好。
然後在我們的TestController中自動載入以下我們的CacheService
TestController.java
package com.daxiong.controller;
import com.daxiong.entity.UserInfo;
import com.daxiong .service.CacheService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@Autowired
CacheService cacheService;
@RequestMapping(value = "/user", method = RequestMethod.GET)
public String getUser() {
return "userTest abc" + this.cacheService.getCache("abc");
}
@RequestMapping(value = "/userInfo", method = RequestMethod.GET)
public UserInfo getUserInfo() {
UserInfo userInfo = new UserInfo("daxiong", "123");
return userInfo;
}
}
然後在我們build的時候就能自動的掃描到我們的CacheService進行Autowired載入
執行結果:
下面我們來拓展以下@Vaule
在我們的application.properties中新增
cache.cache_type=redis
cache.expire=60
然後我們修改CacheService類
package com.daxiong.service;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@Service
public class CacheService {
@Value(value = "${cache.cache_type}")
String cache_type;
@Value(value = "${cache.expire}")
String cache_expire;
public String getCache(String key){
return "得到型別為" + this.cache_type + "快取,失效時間為" + this.cache_expire + "秒";
}
}
在build一下,重新訪問我們ControllerApi
這樣我們就通過配置和Value註解的方式把值注入進去了
如果我們的屬性值非常少,用@Value會很方便,如果你的屬性比較多,一個個寫@Value太噁心。
這時候呢我們就需要另外的一個註解了,那就是@ConfigurationProperties
這裡需要加入依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
在用我們的@ConfigurationProperties通常會有一個prefix這個代表的是字首,萬一變數名有重名的我們可以通過字首區分,接下來用@ConfigurationProperties修改一下CacheService
CacheService.java
package com.daxiong.service;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Service;
@Service
@ConfigurationProperties(prefix = "cache")
public class CacheService {
private String cache_type;
private String expire;
public String getCache_type() {
return cache_type;
}
public void setCache_type(String cache_type) {
this.cache_type = cache_type;
}
public String getExpire() {
return expire;
}
public void setExpire(String expire) {
this.expire = expire;
}
public String getCache(String key) {
return "得到型別為" + this.getCache_type() + "快取,失效時間為" + this.getExpire() + "秒";
}
}
注意這裡要用getset方法,不然取不到值
在重新訪問http://localhost:9090/user結果為
當然不會變了。
還有一種應用場景,當我們有很多的分散式節點對應不同的ip時,我可能會用到陣列了
先在application.properties中新增
cache.cache_ips[0]=120.0.0.1
cache.cache_ips[1]=120.0.0.2
修改CacheService.java
package com.daxiong.service;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Service;
@Service
@ConfigurationProperties(prefix = "cache")
public class CacheService {
private String cache_type;
private String expire;
private String[] cache_ips;
public String[] getCache_ips() {
return cache_ips;
}
public void setCache_ips(String[] cache_ips) {
this.cache_ips = cache_ips;
}
public String getCache_type() {
return cache_type;
}
public void setCache_type(String cache_type) {
this.cache_type = cache_type;
}
public String getExpire() {
return expire;
}
public void setExpire(String expire) {
this.expire = expire;
}
public String getCache(String key) {
for (String ip : this.getCache_ips()) {
System.out.println(ip);
}
return "得到型別為" + this.getCache_type() + "快取,失效時間為" + this.getExpire() + "秒";
}
}
控制檯列印
注入成功
END –!