@ConfigurationProperties與EnableConfigurationProperties使用及說明
@ConfigurationProperties與EnableConfigurationProperties
首先呢,我們需要知道@ConfigurationProperties注解的作用。
@ConfigurationProPerties注解實現(xiàn)了配置文件和實體類的屬性注入。
舉例說明
application.yml文件:
student: name: 小明
Student.java:
@ConfigurationProperties(prefix = "student")
public class Student {
private String name;
public Student() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
需要注意的是:
@ConfigurationProperties一般標(biāo)注在類上,對成員變量的賦值用到了seetter方法,若無setter方法,是無法注入成功的
另外,關(guān)于屬性的注入。除了在類上標(biāo)注@ConfigurationProPerties注解,還可以在成員變量上直接用@Value("${ }")來注入。并且這種方式不需要利用setter方法。
此時的Student類有沒有注入容器中呢?
如果容器中有Student類,利用spring的控制反轉(zhuǎn)的特性:注入進(jìn)spring容器的bean,可以直接利用注解互相注入。
@Configuration
public class Myconfig {
@Autowired
private Student student;
public void sout(){
System.out.println(student.getName()+"****");
}
}
控制臺報錯。
student不滿足依賴關(guān)系,也就是容器中為找到該bean.
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'myconfig': Unsatisfied dependency expressed through field 'student';?
既然是為注入到容器中,那我們在student類上再添加一個@Component注解不就可以解決問題了么?這當(dāng)然可以。
接下來上代碼
這里就用一下屬性注入的另一種方式:
@Component
public class Student {
@Value("${student.name}")
private String name;
public Student() {
}
public String getName() {
return name;
}
}
配置類不做改變
@Configuration
public class Myconfig {
@Autowired
private Student student;
public void sout(){
System.out.println(student.getName()+"****");
}
}
這一次。控制臺成功打印信息:
小明****?
但是呢。我們一般不直接在屬性的實體類上添加@Component注解,至于原因,再說吧。
不用@Component注解,那么我們?nèi)绾卧贑onfig這個bean中用到Student這個類中的屬性值呢。
@EnableConfigurationProperties注解出現(xiàn)了。
student這個類
需要往哪個bean中注入,就在哪個類的上面添加@EnableConfigurationProperties注
@EnableConfigurationProperties({com.example.pojo.Student.class})
@Configuration
public class Myconfig {
@Autowired
private Student student;
public void sout(){
System.out.println(student.getName()+"****");
}
}
結(jié)果當(dāng)然沒有問題。
小明****
需要注意的是
@EnableConfigurationProperties不能單獨使用,他的值是聲明了@ConfigurationProperties注解的類的全限定類名。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java CompletableFuture 異步超時實現(xiàn)深入研究
這篇文章主要為大家介紹了Java CompletableFuture 異步超時實現(xiàn)深入研究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
Java實現(xiàn)字節(jié)數(shù)組轉(zhuǎn)int(IEEE754標(biāo)準(zhǔn))的完整指南
在計算機(jī)科學(xué)中,IEEE 754 標(biāo)準(zhǔn)是浮點數(shù)表示的基石,本文將從 IEEE 754 的底層結(jié)構(gòu)出發(fā),結(jié)合 Java 平臺的特性,系統(tǒng)探討字節(jié)數(shù)組到 int 的轉(zhuǎn)換機(jī)制、IEEE 754 的語義映射、字節(jié)序的影響以及工程實踐中的關(guān)鍵考量2026-05-05
Java使用DOM4j實現(xiàn)讀寫XML文件的屬性和元素
這篇文章主要為大家詳細(xì)介紹了Java使用DOM4j實現(xiàn)讀寫XML文件的屬性和元素,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-12-12
Java實現(xiàn)多路復(fù)用select模型實例詳解
在計算機(jī)網(wǎng)絡(luò)中,多路復(fù)用(Multiplexing)指的是通過一種機(jī)制將多個 I/O 操作合并到同一個線程或進(jìn)程中,從而提高系統(tǒng)的效率,在 Java 中,可以使用 Selector 類來實現(xiàn)基于 I/O 多路復(fù)用的模式,故本文給大家介紹了Java實現(xiàn)多路復(fù)用select模型實例,需要的朋友可以參考下2025-03-03
出現(xiàn)java.lang.UnsupportedClassVersionError錯誤的原因以及解決方法
這篇文章主要給大家介紹了關(guān)于出現(xiàn)java.lang.UnsupportedClassVersionError錯誤的原因以及解決方法,文中通過圖文以及代碼示例將這個錯誤介紹的非常詳細(xì),需要的朋友可以參考下2024-05-05
Java中dubbo+zookeeper微服務(wù)架構(gòu)簡介
Apache Dubbo是一款高性能的 Java RPC 框架,這篇文章主要介紹了Java中dubbo+zookeeper微服務(wù)架構(gòu),需要的朋友可以參考下2021-09-09

