电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Spring使用@Value注解與@PropertySource注解加載配置文件操作

瀏覽:128日期:2023-07-10 11:32:00
1、@Value注解簡介

Spring框架提供的@Value注解可以將外部的值動態注入到Bean中,@Value注解使用在字段、構造器參數和方法參數上。

@Value可以指定屬性取值的表達式,支持通過#{}使用SpringEL來取值,也支持使用${}來將屬性來源中(Properties文件、本地環境變量、系統屬性等)的值注入到Bean的屬性中。

此注解值的注入發生在AutowiredAnnotationBeanPostProcessor類中。

@Value注解實現以下幾種情況:

(1)注入普通字符;

(2)注入操作系統屬性;

(3)注入表達式運算結果;

(4)注入其他Bean的屬性;

(5)注入文件內容;

(6)注入網址內容;

(7)注入屬性文件。

2、@PropertySource注解簡介

@PropertySource注解可以加載指定的屬性文件(*.properties)到 Spring 的 Environment 中。可以配合 @Value 和 @ConfigurationProperties 使用。語法格式如下:

@PropertySource(value = 'classpath:com/pjb/el/user.properties',encoding = 'UTF-8')public class UserInfo{}

【實例】使用@Value注解與@PropertySource注解加載配置文件。

(1)創建用戶信息屬性文件(user.properties)

user.userId=1user.userName=pan_junbiao的博客user.blogUrl=https://blog.csdn.net/pan_junbiaouser.remark=您好,歡迎訪問 pan_junbiao的博客(2)創建用戶信息實體類(UserInfo.java)

使用@PropertySource注解加載配置文件信息,然后使用@Value注解注入屬性值。

package com.pjb.el;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.PropertySource;import org.springframework.stereotype.Component; /** * 用戶信息實體類 * @author pan_junbiao **/@Component@PropertySource(value = 'classpath:com/pjb/el/user.properties',encoding = 'UTF-8')public class UserInfo{ //用戶ID @Value('${user.userId}') private int userId; //用戶姓名 @Value('${user.userName}') private String userName; //博客地址 @Value('${user.blogUrl}') private String blogUrl; //備注 @Value('${user.remark}') private String remark; //省略getter與setter方法...}(3)運行

public static void main(String[] args){ AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ElConfig.class); UserInfo userInfo = context.getBean(UserInfo.class); //打印用戶信息 System.out.println('用戶編號:' + userInfo.getUserId()); System.out.println('用戶姓名:' + userInfo.getUserName()); System.out.println('博客地址:' + userInfo.getBlogUrl()); System.out.println('備注信息:' + userInfo.getRemark());}

執行結果:

Spring使用@Value注解與@PropertySource注解加載配置文件操作

3、綜合實例

【實例】使用@Value注解實現多種情況值的注入和@PropertySource注解加載配置文件。

(1)添加相關的jar包

添加Spring支持及commons-io依賴,pom.xml文件的配置如下:

<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <spring.version>5.2.3.RELEASE</spring.version></properties> <dependencies> <!-- Spring框架 --> <dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version> </dependency> <dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version> </dependency> <!-- commons-io依賴 --> <dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version> </dependency></dependencies>

添加 commons-io.jar 可以簡化文件相關操作,本實例中使用 commons-io 將 file 轉換成字符串。

(2)創建資源文件

在resources資源目錄下創建名稱為info.txt的文本文件,文件內容為:您好,歡迎訪問 pan_junbiao的博客。

在resources資源目錄下創建數據庫連接配置文件db.properties,該文件配置如下:

jdbc.driver=com.mysql.cj.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/db_adminjdbc.username=rootjdbc.password=123456(3)需被注入的Bean

創建名為OtherUser.java的用戶信息類。

package com.pjb.el;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Component; /** * 用戶信息類 * @author pan_junbiao **/@Componentpublic class OtherUser{ //用戶名稱 @Value('pan_junbiao的博客') private String userName; //博客地址 @Value('https://blog.csdn.net/pan_junbiao') private String blogUrl; public String getUserName() {return userName; } public void setUserName(String userName) {this.userName = userName; } public String getBlogUrl() {return blogUrl; } public void setBlogUrl(String blogUrl) {this.blogUrl = blogUrl; }}(4)配置類

創建名為ElConfig.java的配置類。

package com.pjb.el;import org.apache.commons.io.IOUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.PropertySource;import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;import org.springframework.core.env.Environment;import org.springframework.core.io.Resource; /** * 配置類 * @author pan_junbiao **/@Configuration@ComponentScan('com.pjb.el')@PropertySource('classpath:db.properties')public class ElConfig{ /** * 注入普通字符串 */ @Value('您好,歡迎訪問 pan_junbiao的博客') private String comment; /** * 注入操作系統屬性 */ @Value('#{systemProperties[’os.name’]}') private String osName; /** * 注入表達式運算結果 */ @Value('#{ T(java.lang.Math).random() * 100.0 }') private double randomNumber; /** * 注入其他Bean的屬性 */ @Value('#{otherUser.userName}') private String fromUserName; @Value('#{otherUser.blogUrl}') private String fromBlogUrl; /** * 注入文件資源 */ @Value('classpath:info.txt') private Resource testFile; /** * 注入網址資源 */ @Value('https://blog.csdn.net/pan_junbiao') private Resource testUrl; /** * 注入配置文件 */ @Value('${jdbc.driver}') private String jdbc_driver; @Value('${jdbc.url}') private String jdbc_url; @Value('${jdbc.username}') private String jdbc_username; @Value('${jdbc.password}') private String jdbc_password; @Autowired private Environment environment; @Bean public static PropertySourcesPlaceholderConfigurer propertyConfigurer() {return new PropertySourcesPlaceholderConfigurer(); } public void outputResource() {try{ System.out.println('注入普通字符串:'); System.out.println(comment); System.out.println('------------------------------------------------'); System.out.println('注入操作系統屬性:'); System.out.println(osName); System.out.println('------------------------------------------------'); System.out.println('注入表達式運算結果:'); System.out.println(randomNumber); System.out.println('------------------------------------------------'); System.out.println('注入其他Bean的屬性:'); System.out.println('用戶名稱:' + fromUserName); System.out.println('博客地址:'+ fromBlogUrl); System.out.println('------------------------------------------------'); System.out.println('注入文件資源:'); System.out.println('文件中的內容:' + IOUtils.toString(testFile.getInputStream())); System.out.println('------------------------------------------------'); System.out.println('注入配置文件(方式一):'); System.out.println('數據庫驅動:' + jdbc_driver); System.out.println('數據庫連接:' + jdbc_url); System.out.println('數據庫用戶:' + jdbc_username); System.out.println('數據庫密碼:' + jdbc_password); System.out.println('------------------------------------------------'); System.out.println('注入配置文件(方式二):'); System.out.println('數據庫驅動:' + environment.getProperty('jdbc.driver')); System.out.println('數據庫連接:' + environment.getProperty('jdbc.url')); System.out.println('數據庫用戶:' + environment.getProperty('jdbc.username')); System.out.println('數據庫密碼:' + environment.getProperty('jdbc.password')); System.out.println('------------------------------------------------');}catch (Exception ex){ ex.printStackTrace();} }}

注入配置配件需要使用@PropertySource注解指定文件地址,若使用@Value注解,則要配置一個PropertySourcesPlaceholderConfigurer的Bean。注意,@Value('${jdbc.driver}')使用的是“${}”而不是“#{}”。

注入Properties還可以從Environment中獲得。

(5)運行

package com.pjb.el;import org.springframework.context.annotation.AnnotationConfigApplicationContext; /** * 運行類 * @author pan_junbiao **/public class Main{ public static void main(String[] args) {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ElConfig.class);ElConfig resourceService = context.getBean(ElConfig.class);resourceService.outputResource();context.close(); }}

執行結果:

Spring使用@Value注解與@PropertySource注解加載配置文件操作

spring中@value注解需要注意首先

@value需要參數,這里參數可以是兩種形式:

@Value(“#{configProperties[‘t1.msgname’]}”)

或者

@Value(“${t1.msgname}”);其次

下面我們來看看如何使用這兩形式,在配置上有什么區別:

1、@Value(“#{configProperties[‘t1.msgname’]}”)這種形式的配置中有“configProperties”,其實它指定的是配置文件的加載對象:配置如下:

classpath:/config/t1.properties

這樣配置就可完成對屬性的具體注入了;

2、@Value('${t1.msgname}')這種形式不需要指定具體加載對象,這時候需要一個關鍵的對象來完成PreferencesPlaceholderConfigurer,這個對象的配置可以利用上面配置1中的配置,也可以自己直接自定配置文件路徑。

如果使用配置1中的配置,可以寫成如下情況:

<bean class='org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer'> <property name='properties' ref='configProperties'/></bean>

如果直接指定配置文件的話,可以寫成如下情況:

<bean class='org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer'> <property name='location'> <value>config/t1.properties</value> </property></bean>**重點內容**

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
主站蜘蛛池模板: 外贸资讯网 - 洞悉全球贸易,把握市场先机| 铝板冲孔网,不锈钢冲孔网,圆孔冲孔网板,鳄鱼嘴-鱼眼防滑板,盾构走道板-江拓数控冲孔网厂-河北江拓丝网有限公司 | 冷却塔风机厂家_静音冷却塔风机_冷却塔电机维修更换维修-广东特菱节能空调设备有限公司 | 蜘蛛车-高空作业平台-升降机-高空作业车租赁-臂式伸缩臂叉装车-登高车出租厂家 - 普雷斯特机械设备(北京)有限公司 | 检验科改造施工_DSA手术室净化_导管室装修_成都特殊科室建设厂家_医疗净化工程公司_四川华锐 | 亳州网络公司 - 亳州网站制作 - 亳州网站建设 - 亳州易天科技 | 礼仪庆典公司,礼仪策划公司,庆典公司,演出公司,演艺公司,年会酒会,生日寿宴,动工仪式,开工仪式,奠基典礼,商务会议,竣工落成,乔迁揭牌,签约启动-东莞市开门红文化传媒有限公司 | 粉末包装机,拆包机厂家,价格-上海强牛包装机械设备有限公司 | 黄石东方妇产医院_黄石妇科医院哪家好_黄石无痛人流医院 | 德国进口电锅炉_商用电热水器_壁挂炉_电采暖器_电热锅炉[德国宝] | 云阳人才网_云阳招聘网_云阳人才市场_云阳人事人才网_云阳人家招聘网_云阳最新招聘信息 | IIS7站长之家-站长工具-爱网站请使用IIS7站长综合查询工具,中国站长【WWW.IIS7.COM】 | 智慧水务|智慧供排水利信息化|水厂软硬件系统-上海敢创 | 酶联免疫分析仪-多管旋涡混合仪|混合器-莱普特科学仪器(北京)有限公司 | 中式装修设计_室内中式装修_【云臻轩】中式设计机构 | 合肥宠物店装修_合肥宠物美容院装修_合肥宠物医院设计装修公司-安徽盛世和居装饰 | 手术室净化厂家_成都实验室装修公司_无尘车间施工单位_洁净室工程建设团队-四川华锐16年行业经验 | 天坛家具官网| 药品冷藏箱厂家_低温冰箱_洁净工作台-济南欧莱博电子商务有限公司官网 | 激光内雕_led玻璃_发光玻璃_内雕玻璃_导光玻璃-石家庄明晨三维科技有限公司 激光内雕-内雕玻璃-发光玻璃 | 撕碎机,撕破机,双轴破碎机-大件垃圾破碎机厂家 | 媒介云-全网整合营销_成都新闻媒体发稿_软文发布平台 | 撕碎机,撕破机,双轴破碎机-大件垃圾破碎机厂家 | 家用净水器代理批发加盟_净水机招商代理_全屋净水器定制品牌_【劳伦斯官网】 | 油漆辅料厂家_阴阳脚线_艺术漆厂家_内外墙涂料施工_乳胶漆专用防霉腻子粉_轻质粉刷石膏-魔法涂涂 | 涿州网站建设_网站设计_网站制作_做网站_固安良言多米网络公司 | 高效复合碳源-多核碳源生产厂家-污水处理反硝化菌种一长隆科技库巴鲁 | 光栅尺_Magnescale探规_磁栅尺_笔式位移传感器_苏州德美达 | 优宝-汽车润滑脂-轴承润滑脂-高温齿轮润滑油脂厂家 | 泰国专线_泰国物流专线_广州到泰国物流公司-泰廊曼国际 | 济南品牌包装设计公司_济南VI标志设计公司_山东锐尚文化传播 | 喷码机,激光喷码打码机,鸡蛋打码机,手持打码机,自动喷码机,一物一码防伪溯源-恒欣瑞达有限公司 | 深圳美安可自动化设备有限公司,喷码机,定制喷码机,二维码喷码机,深圳喷码机,纸箱喷码机,东莞喷码机 UV喷码机,日期喷码机,鸡蛋喷码机,管芯喷码机,管内壁喷码机,喷码机厂家 | 玉米深加工设备-玉米深加工机械-新型玉米工机械生产厂家-河南粮院机械制造有限公司 | 祝融环境-地源热泵多恒系统高新技术企业,舒适生活环境缔造者! | 外贸资讯网 - 洞悉全球贸易,把握市场先机| 动物麻醉机-数显脑立体定位仪-北京易则佳科技有限公司 | 雷达液位计_超声波风速风向仪_雨量传感器_辐射传感器-山东风途物联网 | 济南铝方通-济南铝方通价格-济南方通厂家-山东鲁方通建材有限公司 | 集装箱箱号识别_自重载重图像识别_铁路车号自动识别_OCR图像识别 | 行吊_电动单梁起重机_双梁起重机_合肥起重机_厂家_合肥市神雕起重机械有限公司 |