您好,登錄后才能下訂單哦!
本篇內容介紹了“SpringBoot如何自定義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") //配置文件的位置,對應的屬性注入 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); } }
注入方式有許多,可以導入在寫一個配置類,然后加上@Bean即可,啟動類中的@SpringBootApplication本身就是一個配置類。所以直接在這寫也可以。
導入druid坐標
<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); } }
運行出來什么也沒
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()); } }
運行結果
這是因為prefix屬性只能用小寫,不能使用駝峰命名法,改成小寫即可
@EnableConfigurationProperties開啟對應的屬性功能,可以通過配置中的屬性,讓我們對應的類名來做屬性注入 ,這樣也可以看出有哪些類通過spring去管理
@ConfigurationProperties是做具體的屬性綁定的,對應的配置文件。
當我們使用了@EnableConfigurationProperties,且又在類總使用了@Component,就會報錯,如下
這個錯誤是,找到兩個bean,一個類對應著兩個bean導致不唯一了。
原因是:@EnableConfigurationProperties(ServerConfig.class),默認會 交給spring容器去管理,而要想讓spring去管理,首先得是一個bean對象,所就會把這個ServerConfig.class變成bean對象。我們在那個類中寫了@Component,這個注解也是說這個是一個bean對象,這樣就導致了同一個類中對應了兩個bean對象,所以產生錯誤。這兩個注解不能同時使用,一般使用@EnableConfigurationProperties更能體現(xiàn)出是哪個類受spring管且需要配置注入。
原因:springboot配置的處理器并沒有配置,現(xiàn)在不能識別這個注解
解決:那就給它加上
pom.xml加上:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> </dependency>
這樣警告就沒有了。
@ConfigurationProperties可以為第三方的bean綁定屬性。
也叫寬松綁定,指的是在配置文件中的參數(shù)名任意大小寫下劃線或者中線,都會給你匹配出來。
在實體類中也可以識別并正常運行。
@Value不支持寬松綁定
@ConfigurationProperties綁定前綴命名規(guī)范(prefix):僅能使用純小寫字母、數(shù)字、下劃線作為合法的字符(以后都使用小寫更方便。)
小結:
@ConfigurationProperties綁定屬性支持屬性名寬松綁定
@Value注解不支持寬松綁定
綁定的前綴命名有規(guī)則
“SpringBoot如何自定義bean綁定”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注億速云網(wǎng)站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。