SpringBoot自定義bean綁定實現(xiàn)
自定義bean綁定
在配置文件中寫入
servers:
ipAddress: 192.158.0.1
port: 1234
detail: zhangsan
定義一個實體類對象去接受這些屬性
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") //配置文件的位置,對應(yīng)的屬性注入
public class ServerConfig {
private String ipAddress;
private int port;
private String detail;
}啟動類下的
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)入在寫一個配置類,然后加上@Bean即可,啟動類中的@SpringBootApplication本身就是一個配置類。所以直接在這寫也可以。
導(dǎo)入druid坐標(biāo)
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.12</version>
</dependency>啟動類
@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);
}
}運行出來什么也沒

第三方bea通過配置文件注參數(shù)
application.yml下
datasource:
driverClassName: "com.mysql.jdbc.driver.zhkc"
username: "張三"
password: kczh
啟動類下
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());
}
}運行結(jié)果

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

這是因為prefix屬性只能用小寫,不能使用駝峰命名法,改成小寫即可

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

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

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

在實體類中也可以識別并正常運行。
@Value不支持寬松綁定

@ConfigurationProperties綁定前綴命名規(guī)范(prefix):僅能使用純小寫字母、數(shù)字、下劃線作為合法的字符(以后都使用小寫更方便。)
小結(jié):
@ConfigurationProperties綁定屬性支持屬性名寬松綁定
@Value注解不支持寬松綁定
綁定的前綴命名有規(guī)則
到此這篇關(guān)于SpringBoot自定義bean綁定實現(xiàn)的文章就介紹到這了,更多相關(guān)SpringBoot bean綁定內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實現(xiàn) 基于密度的局部離群點檢測------lof算法
這篇文章主要介紹了Java實現(xiàn) 基于密度的局部離群點檢測------lof算法,本文通過算法概述,算法Java源碼,測試結(jié)果等方面一一進行說明,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
SpringBoot?Loki安裝簡介及實戰(zhàn)思路
這篇文章主要為大家介紹了SpringBoot?Loki安裝簡介及實戰(zhàn)思路詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪的相關(guān)資料2022-11-11
Spring實戰(zhàn)之讓Bean獲取Spring容器操作示例
這篇文章主要介紹了Spring實戰(zhàn)之讓Bean獲取Spring容器操作,結(jié)合實例形式分析了Bean獲取Spring容器的相關(guān)原理、實現(xiàn)方法及操作注意事項,需要的朋友可以參考下2019-11-11
spring boot security自定義認(rèn)證的代碼示例
這篇文章主要介紹了spring boot security自定義認(rèn)證,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07

