SpringBoot屬性綁定與bean屬性校驗(yàn)實(shí)現(xiàn)方法詳解
屬性綁定
屬性綁定:我們可以使用配置文件對(duì)類(lèi)的屬性進(jìn)行賦值綁定。
自定義類(lèi)屬性綁定
我們自定義一個(gè)類(lèi),在此使用yml文件進(jìn)行類(lèi)屬性的綁定。
屬性綁定步驟:
1.創(chuàng)建一個(gè)類(lèi),設(shè)置字段。
public class ServiceConfig {
private int prot;
private String ipAddress;
private long timeOut;2.添加注解
@Component
@Data
@ConfigurationProperties(prefix = "servers")
public class ServiceConfig {
private int prot;
private String ipAddress;
private long timeOut;注解說(shuō)明:
@Component:將此類(lèi)加入Spring容器。
@Data:使用lombok快速創(chuàng)建實(shí)體類(lèi)。
@ConfigurationProperties:聲明此類(lèi)使用配置文件進(jìn)行屬性綁定,
并且設(shè)置使用配置文件中的哪個(gè)數(shù)據(jù)。
3.配置文件設(shè)置數(shù)據(jù)

4.測(cè)試:在boot引導(dǎo)類(lèi)中
@SpringBootApplication
public class SpringBootDemo2Application {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(SpringBootDemo2Application.class, args);
//獲取自定義類(lèi)
ServiceConfig bean = context.getBean(ServiceConfig.class);
//打印獲取的bean,查看是否成功綁定屬性
System.out.println(bean);
}
}測(cè)試結(jié)果: 發(fā)現(xiàn)打印出來(lái)的數(shù)據(jù)就是我們?cè)趛ml中設(shè)置的數(shù)據(jù)

第三方bean屬性匹配
說(shuō)明:有時(shí)候我們的需求并不只是想要給我們自己的類(lèi)進(jìn)行屬性綁定,還需要給第三方的bean進(jìn)行屬性綁定。
在此使用DruidDataSource作為第三方bean,為此bean進(jìn)行屬性綁定。
將Druid加入spring容器。(操作前提是導(dǎo)入了Druid坐標(biāo))
@Bean
@ConfigurationProperties(prefix = "datasource")
public DruidDataSource dataSource(){
DruidDataSource druid = new DruidDataSource();
return druid;
}yml文件中進(jìn)行屬性綁定
datasource:
username: root
password: root
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test
測(cè)試:打印第三方bean的配置數(shù)據(jù)到控制臺(tái)看效果
@SpringBootApplication
public class SpringBootDemo2Application {
@Bean
@ConfigurationProperties(prefix = "datasource")
public DruidDataSource dataSource(){
DruidDataSource druid = new DruidDataSource();
return druid;
}
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(SpringBootDemo2Application.class, args);
DruidDataSource bean = context.getBean(DruidDataSource.class);
System.out.println(bean.getUsername());
System.out.println(bean.getPassword());
System.out.println(bean.getUrl());
System.out.println(bean.getDriverClassName());
}
}測(cè)試結(jié)果:

規(guī)則-松散綁定(寬松綁定)
寬松綁定是一種特性,說(shuō)的是在配置文件中的綁定屬性的數(shù)據(jù)時(shí),屬性名的書(shū)寫(xiě)規(guī)定很寬松。
松散綁定的規(guī)則:忽略標(biāo)點(diǎn)符號(hào),將所有字母轉(zhuǎn)為小寫(xiě)
特點(diǎn):匹配規(guī)則很寬松。
舉例:屬性綁定,在配置文件中設(shè)置多種屬性名進(jìn)行匹配。
我們配置類(lèi)的ipAddress屬性,查看在配置文件中書(shū)寫(xiě)屬性的多種形式。
需要設(shè)置的屬性:

配置文件中進(jìn)行屬性綁定:

說(shuō)明:上面的方式,均可以對(duì)屬性進(jìn)行綁定,并未列出所有。
原因:忽略標(biāo)點(diǎn)符號(hào),將所有字母轉(zhuǎn)為小寫(xiě)
如上方式有很多種,其中,官方主張”烤肉串模式”。
烤肉串模式:ip-address: 198.56.23.38
值得注意的是:
如上的寬松綁定規(guī)則僅僅限于:@ConfigurationProperties
Bean屬性校驗(yàn)
對(duì)類(lèi)的屬性賦值時(shí)自定義規(guī)則進(jìn)行校驗(yàn)。
"屬性校驗(yàn)"使用步驟
1.導(dǎo)入對(duì)應(yīng)坐標(biāo)
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>坐標(biāo)說(shuō)明:
validation-api:是屬性校驗(yàn)的接口坐標(biāo)。
hibernate-validator:相當(dāng)于是屬性校驗(yàn)的接口實(shí)現(xiàn)類(lèi)坐標(biāo)。
兩者關(guān)系就像jdbc和MySQL驅(qū)動(dòng)相似,所以需要導(dǎo)入兩個(gè)坐標(biāo)。
2.開(kāi)啟校驗(yàn)功能
在需要啟用校驗(yàn)功能的類(lèi)上寫(xiě)注解:@Validated。
@Data
@ConfigurationProperties(prefix = "servers")
@Validated
public class ServiceConfig {
}3.設(shè)置校驗(yàn)規(guī)則
在屬性上設(shè)置校驗(yàn)規(guī)則
@Data
@ConfigurationProperties(prefix = "servers")
@Validated
public class ServiceConfig {
@Max(value = 8888,message = "最大值能超過(guò)8888")
@Min(value = 200,message = "最小值不可小于200")
private int prot;
private String ipAddress;
private long timeOut;
}說(shuō)明:如上代碼中,@Max和@Min就是設(shè)置的規(guī)則,其中有value和messge兩個(gè)屬性。
提供數(shù)據(jù)校驗(yàn)的規(guī)則有許多,如下(查看constraints包):

4.測(cè)試
我們使用yml文件進(jìn)行屬性綁定,進(jìn)行屬性校驗(yàn),如果不符合條件則報(bào)錯(cuò)。

到此這篇關(guān)于SpringBoot屬性綁定與bean屬性校驗(yàn)實(shí)現(xiàn)方法詳解的文章就介紹到這了,更多相關(guān)SpringBoot屬性綁定內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
全面解析JPA?倉(cāng)庫(kù)repository中的findAll()方法
這篇文章主要介紹了全面解析JPA?倉(cāng)庫(kù)repository中的findAll()方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
關(guān)于泛型擦除問(wèn)題的解決--Mybatis查詢(xún)類(lèi)型轉(zhuǎn)換
這篇文章主要介紹了關(guān)于泛型擦除問(wèn)題的解決--Mybatis查詢(xún)類(lèi)型轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
Java continue break制作簡(jiǎn)單聊天室程序
這篇文章主要為大家詳細(xì)介紹了Java continue break制作簡(jiǎn)單聊天室程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
JAVA的Dubbo如何實(shí)現(xiàn)各種限流算法
Dubbo是一種高性能的Java RPC框架,廣泛應(yīng)用于分布式服務(wù)架構(gòu)中,在Dubbo中實(shí)現(xiàn)限流可以幫助服務(wù)在高并發(fā)場(chǎng)景下保持穩(wěn)定性和可靠性,常見(jiàn)的限流算法包括固定窗口算法、滑動(dòng)窗口算法、令牌桶算法和漏桶算法,在Dubbo中集成限流器可以通過(guò)實(shí)現(xiàn)自定義過(guò)濾器來(lái)實(shí)現(xiàn)2025-01-01
jstl之map,list訪(fǎng)問(wèn)遍歷以及el表達(dá)式map取值的實(shí)現(xiàn)
下面小編就為大家?guī)?lái)一篇jstl之map,list訪(fǎng)問(wèn)遍歷以及el表達(dá)式map取值的實(shí)現(xiàn)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03
Java如何實(shí)現(xiàn)遠(yuǎn)程文件下載到本地目錄
本文介紹了如何使用Java來(lái)實(shí)現(xiàn)遠(yuǎn)程文件的下載功能,主要通過(guò)HTTPS路徑下載文件到本地目錄,詳細(xì)介紹了相關(guān)代碼和測(cè)試步驟,并提供了實(shí)際案例供參考,本文旨在幫助需要實(shí)現(xiàn)文件下載功能的開(kāi)發(fā)者快速掌握核心技術(shù)2024-10-10
Mybatis的sql語(yǔ)句執(zhí)行異常后打印到日志問(wèn)題
文章介紹了一種Mybatis異常日志打印方案,主要通過(guò)Mybatis攔截器獲取執(zhí)行的sql語(yǔ)句,并利用ThreadLocal存儲(chǔ),以避免多線(xiàn)程下的sql語(yǔ)句覆蓋問(wèn)題,當(dāng)異常發(fā)生時(shí),從ThreadLocal中取出sql語(yǔ)句并打印到單獨(dú)的日志文件中,方便數(shù)據(jù)恢復(fù),該方案經(jīng)過(guò)壓力測(cè)試2024-10-10

