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é)果等方面一一進(jìn)行說明,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07SpringBoot?Loki安裝簡介及實戰(zhàn)思路
這篇文章主要為大家介紹了SpringBoot?Loki安裝簡介及實戰(zhàn)思路詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪的相關(guān)資料2022-11-11Spring實戰(zhàn)之讓Bean獲取Spring容器操作示例
這篇文章主要介紹了Spring實戰(zhàn)之讓Bean獲取Spring容器操作,結(jié)合實例形式分析了Bean獲取Spring容器的相關(guān)原理、實現(xiàn)方法及操作注意事項,需要的朋友可以參考下2019-11-11spring boot security自定義認(rèn)證的代碼示例
這篇文章主要介紹了spring boot security自定義認(rèn)證,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07