SpringBoot屬性註入的多種方式實例
一、@Value註解註入屬性
SpringBoot默認可以將application.properties文件或application.yml文件中定義的屬性值註入到java類中,這種註入實際上是通過java類屬性的setter方法進行的。
例:將application.yml中的以下屬性註入到類中:
## 自定義屬性
petshop:
name: 睿芽寵物
introduce: 種類齊全,安全可靠
licences: 1、上市許可證,2、疫苗許可證
infos: “{‘phone’:’36xx102′,’address’:’xx省xx市’}”
使用@Value註解可以將application.yml中的屬性註入,@Value註解使用${屬性名}的方式來聲明要註入的屬性,如果要註入的屬性為Map集合,則需要結合Spel表達式進行處理。
package com.it.action; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @RestController @RequestMapping("/source") public class SourceAction { @Value("${petshop.name}") private String name; @Value("${petshop.introduce}") private String introduce; @Value("${petshop.licences}") private List<String> licences; @Value("#{${petshop.infos}}") private Map<String, String> infos; @RequestMapping("/show") public Object show() { Map<String, Object> map = new LinkedHashMap(); map.put("name", name); map.put("introduce", introduce); map.put("licences", licences); map.put("infos", infos); return map; } }
訪問http://localhost:8080/source/show觀察被註入的屬性:
二、@ConfigurationProperties註解批量註入屬性
@ConfigurationProperties註解用於註入有著相同前綴的屬性,註入的方式也是通過java類的setter方法來完成,但是這種方式缺少瞭@Value註解的靈活性,也無法結合spel語言進行處理。
例:將application.yml中的以下屬性註入到類中:
## 自定義屬性
petshop:
name: 睿芽寵物
introduce: 種類齊全,安全可靠
licences: 上市許可證,疫苗許可證
infos:
– phone: 36xx102
– address: xx省xx市
新建PetShop類並註入屬性:
package com.it.vo; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import java.util.List; import java.util.Map; @Data @Component @ConfigurationProperties(prefix = "petshop") public class PetShop { private String name; private String introduce; private List<String> licences; private Map<String, String> infos; }
測試註入的結果:
package com.it.action; import com.it.vo.PetShop; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/source") public class SourceAction { @Autowired private PetShop petShop; @RequestMapping("/show") public Object show() { return petShop; } }
三、註入實體對象
使用@ConfigurationProperties註解可以將關聯的對象一同註入。
修改application.yml文件:
## 自定義屬性
petshop:
name: 睿芽寵物
introduce: 種類齊全,安全可靠
shopInfo:
phone: 36xx102
address: xx省xx市
licences: 上市許可證,疫苗許可證
pets:
– pet:
name: 金毛
price: 3365.21
– pet:
name: 巴哥
price: 2136.10
新建三個java類,並設置好引用關系:
@Data public class PetShopInfo { private String phone; private String address; private List<String> licences; }
@Data public class Pet { private String name; private double price; }
@Data @Component @ConfigurationProperties(prefix = "petshop") public class PetShop { private String name; private String introduce; private PetShopInfo shopInfo; private List<Pet> pets; }
測試註入結果:
@RestController @RequestMapping("/source") public class SourceAction { @Autowired private PetShop petShop; @RequestMapping("/show") public Object show() { return petShop; } }
四、自定義文件註入
在resource目錄下新建petshop/petshop.properties文件,將application.yml中的屬性轉換為properties中的key-value格式:
## 自定義屬性
petshop.name=睿芽寵物
petshop.introduce=種類齊全,安全可靠petshop.shopInfo.phone=36xx102
petshop.shopInfo.address=xx省xx市
petshop.shopInfo.licences=上市許可證,疫苗許可證petshop.pets[0].name=金毛
petshop.pets[0].price=3365.21petshop.pets[1].name=巴哥
petshop.pets[1].price=2136.10
修改PetShop類,添加@PropertySource註解導入properties文件
@Data @Component @PropertySource(value = "classpath:petshop/petshop.properties", encoding = "UTF-8") @ConfigurationProperties(prefix = "petshop") public class PetShop { private String name; private String introduce; private PetShopInfo shopInfo; private List<Pet> pets; }
訪問http://localhost:8080/source/show發現可以得到與上例相同的結果。
總結
到此這篇關於SpringBoot屬性註入的多種方式的文章就介紹到這瞭,更多相關SpringBoot屬性註入內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- SpringBoot 屬性配置中獲取值的方式
- Spring Boot詳解配置文件有哪些作用與細則
- SpringBoot從配置文件中獲取屬性的四種方法總結
- SpringBoot實現yml配置文件為變量賦值
- springboot讀取自定義配置文件時出現亂碼解決方案