1. 程式人生 > >2.spring boot熱啟動,autowired自動載入,value註解,屬性注入

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 –!