SpringBoot自定義bean綁定實(shí)現(xiàn)
自定義bean綁定
在配置文件中寫入
servers:
ipAddress: 192.158.0.1
port: 1234
detail: zhangsan
定義一個(gè)實(shí)體類對(duì)象去接受這些屬性
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data //lombok省去get/set/toString
@Component //交給spring容器管理
@ConfigurationProperties(prefix = "servers") //配置文件的位置,對(duì)應(yīng)的屬性注入
public class ServerConfig {
private String ipAddress;
private int port;
private String detail;
}啟動(dòng)類下的
import com.pojo.ServerConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
@SpringBootApplication
public class Springboot11ConfigurationApplication {
public static void main(String[] args) {
ConfigurableApplicationContext run = SpringApplication.run(Springboot11ConfigurationApplication.class, args);
ServerConfig bean = run.getBean(ServerConfig.class);
System.out.println(bean);
}
}
導(dǎo)入第三方bean
注入方式有許多,可以導(dǎo)入在寫一個(gè)配置類,然后加上@Bean即可,啟動(dòng)類中的@SpringBootApplication本身就是一個(gè)配置類。所以直接在這寫也可以。
導(dǎo)入druid坐標(biāo)
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.12</version>
</dependency>啟動(dòng)類
@SpringBootApplication
public class Springboot11ConfigurationApplication {
@Bean//注入
public DruidDataSource druidDataSource(){
DruidDataSource ds=new DruidDataSource();
return ds;
}
public static void main(String[] args) {
ConfigurableApplicationContext run = SpringApplication.run(Springboot11ConfigurationApplication.class, args);
ServerConfig bean = run.getBean(ServerConfig.class);
System.out.println(bean);
DruidDataSource dds = run.getBean(DruidDataSource.class);
System.out.println(dds);
}
}運(yùn)行出來(lái)什么也沒(méi)

第三方bea通過(guò)配置文件注參數(shù)
application.yml下
datasource:
driverClassName: "com.mysql.jdbc.driver.zhkc"
username: "張三"
password: kczh
啟動(dòng)類下
package com;
import com.alibaba.druid.pool.DruidDataSource;
import com.pojo.ServerConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class Springboot11ConfigurationApplication {
@Bean
@ConfigurationProperties(prefix = "datasource")
public DruidDataSource druidDataSource(){
DruidDataSource ds=new DruidDataSource();
return ds;
}
public static void main(String[] args) {
ConfigurableApplicationContext run = SpringApplication.run(Springboot11ConfigurationApplication.class, args);
// ServerConfig bean = run.getBean(ServerConfig.class);
// System.out.println(bean);
DruidDataSource dds = run.getBean(DruidDataSource.class);
System.out.println(dds.getDriverClassName());
System.out.println(dds.getUsername());
System.out.println(dds.getPassword());
}
}運(yùn)行結(jié)果

出現(xiàn)Prefix must be in canonical form

這是因?yàn)閜refix屬性只能用小寫,不能使用駝峰命名法,改成小寫即可

@EnableConfigurationProperties()和@ConfigurationProperties的區(qū)別
@EnableConfigurationProperties開啟對(duì)應(yīng)的屬性功能,可以通過(guò)配置中的屬性,讓我們對(duì)應(yīng)的類名來(lái)做屬性注入 ,這樣也可以看出有哪些類通過(guò)spring去管理
@ConfigurationProperties是做具體的屬性綁定的,對(duì)應(yīng)的配置文件。
當(dāng)我們使用了@EnableConfigurationProperties,且又在類總使用了@Component,就會(huì)報(bào)錯(cuò),如下

這個(gè)錯(cuò)誤是,找到兩個(gè)bean,一個(gè)類對(duì)應(yīng)著兩個(gè)bean導(dǎo)致不唯一了。
原因是:@EnableConfigurationProperties(ServerConfig.class),默認(rèn)會(huì) 交給spring容器去管理,而要想讓spring去管理,首先得是一個(gè)bean對(duì)象,所就會(huì)把這個(gè)ServerConfig.class變成bean對(duì)象。我們?cè)谀莻€(gè)類中寫了@Component,這個(gè)注解也是說(shuō)這個(gè)是一個(gè)bean對(duì)象,這樣就導(dǎo)致了同一個(gè)類中對(duì)應(yīng)了兩個(gè)bean對(duì)象,所以產(chǎn)生錯(cuò)誤。這兩個(gè)注解不能同時(shí)使用,一般使用@EnableConfigurationProperties更能體現(xiàn)出是哪個(gè)類受spring管且需要配置注入。
解除@ConfigurationProperties注解警告

原因:springboot配置的處理器并沒(méi)有配置,現(xiàn)在不能識(shí)別這個(gè)注解
解決:那就給它加上
pom.xml加上:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>這樣警告就沒(méi)有了。
@ConfigurationProperties可以為第三方的bean綁定屬性。
@ConfigurationProperties的松散綁定
也叫寬松綁定,指的是在配置文件中的參數(shù)名任意大小寫下劃線或者中線,都會(huì)給你匹配出來(lái)。

在實(shí)體類中也可以識(shí)別并正常運(yùn)行。
@Value不支持寬松綁定

@ConfigurationProperties綁定前綴命名規(guī)范(prefix):僅能使用純小寫字母、數(shù)字、下劃線作為合法的字符(以后都使用小寫更方便。)
小結(jié):
@ConfigurationProperties綁定屬性支持屬性名寬松綁定
@Value注解不支持寬松綁定
綁定的前綴命名有規(guī)則
到此這篇關(guān)于SpringBoot自定義bean綁定實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)SpringBoot bean綁定內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java解析xml的4種方式的優(yōu)缺點(diǎn)對(duì)比及實(shí)現(xiàn)詳解
這篇文章主要介紹了java解析xml的4種方式的優(yōu)缺點(diǎn)對(duì)比及實(shí)現(xiàn)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
IO流概述分類字節(jié)流寫數(shù)據(jù)三種方式及問(wèn)題分析
這篇文章主要為大家介紹了IO流概述分類字節(jié)流寫數(shù)據(jù)三種方式及寫數(shù)據(jù)問(wèn)題分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
MyBatis的mapper.xml文件中入?yún)⒑头祷刂档膶?shí)現(xiàn)
這篇文章主要介紹了MyBatis的mapper.xml文件中入?yún)⒑头祷刂档膶?shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01

