<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在組態檔中寫入
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更能體現出是哪個類受spring管且需要設定注入。
原因:springboot設定的處理器並沒有設定,現在不能識別這個註解
解決:那就給它加上
pom.xml加上:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> </dependency>
這樣警告就沒有了。
@ConfigurationProperties可以為第三方的bean繫結屬性。
也叫寬鬆繫結,指的是在組態檔中的引數名任意大小寫下劃線或者中線,都會給你匹配出來。
在實體類中也可以識別並正常執行。
@Value不支援寬鬆繫結
@ConfigurationProperties繫結字首命名規範(prefix):僅能使用純小寫字母、數位、下劃線作為合法的字元(以後都使用小寫更方便。)
小結:
@ConfigurationProperties繫結屬性支援屬性名寬鬆繫結
@Value註解不支援寬鬆繫結
繫結的字首命名有規則
到此這篇關於SpringBoot自定義bean繫結實現的文章就介紹到這了,更多相關SpringBoot bean繫結內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45