日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

詳解Spring中的@PropertySource注解使用

瀏覽:27日期:2023-12-13 15:32:02

@PropertySource注解是Spring用于加載配置文件,默認(rèn)支持.properties與.xml兩種配置文件。@PropertySource屬性如下:

name:默認(rèn)為空,不指定Spring自動(dòng)生成 value:配置文件 ignoreResourceNotFound:沒(méi)有找到配置文件是否忽略,默認(rèn)false,4.0版本加入 encoding:配置文件編碼格式,默認(rèn)UTF-8 4.3版本才加入 factory:配置文件解析工廠,默認(rèn):PropertySourceFactory.class 4.3版本才加入,如果是之前的版本就需要手動(dòng)注入配置文件解析Bean

接下來(lái)就使用@PropertySource來(lái)加載.properties與.xml配置文件。這里模擬連接MySQL數(shù)據(jù)庫(kù)。首先添加依賴:

<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.1.6.RELEASE</version></dependency><dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.1.6.RELEASE</version></dependency><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.26</version></dependency><dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.20</version></dependency>

準(zhǔn)備屬性配置文件jdbc.properties

jdbc.driver=com.mysql.cj.jdbc.Driverjdbc.url=jdbc:mysql://127.0.0.1:3306jdbc.userName=rootjdbc.password=xiaohu

創(chuàng)建屬性實(shí)體類來(lái)加載配置文件JdbcProperties

@Data@Repository@PropertySource(value = 'classpath:jdbc.properties')public class JdbcProperties { @Value('${jdbc.driver}') private String driver; @Value('${jdbc.url}') private String url; @Value('${jdbc.userName}') private String userName; @Value('${jdbc.password}') private String password;}

創(chuàng)建JDBC配置類JdbcConfig

@Componentpublic class JdbcConfig { @Bean public DataSource dataSource(JdbcProperties jdbcProperties){System.out.println('打印獲取到的配置信息:'+jdbcProperties);DriverManagerDataSource dataSource = new DriverManagerDataSource();dataSource.setDriverClassName(jdbcProperties.getDriver());dataSource.setUrl(jdbcProperties.getUrl());dataSource.setUsername(jdbcProperties.getUserName());dataSource.setPassword(jdbcProperties.getPassword());return dataSource; }}

創(chuàng)建Spring配置類SpringConfiguration

@Configurationpublic class SpringConfiguration {}

創(chuàng)建測(cè)試類測(cè)試讀取配置文件

public class PropertySourceTest { public static void main(String[] args) {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext('config');DataSource dataSource = context.getBean('dataSource',DataSource.class);System.out.println(dataSource); }}

查看輸出結(jié)果:

打印獲取到的配置信息:JdbcProperties(driver=com.mysql.cj.jdbc.Driver, url=jdbc:mysql://127.0.0.1:3306, userName=root, password=xiaohu)org.springframework.jdbc.datasource.DriverManagerDataSource@58695725

從結(jié)果可以看出,我們的properties中的配置已經(jīng)成功讀取到,并且DataSource也從Spring容器中獲取到。上面介紹注解的屬性時(shí),factory是4.3版本才加入的,那么如果4.3版本之前要解析配置文件又應(yīng)該怎么處理呢?,這個(gè)時(shí)候就需要手動(dòng)將解析配置文件的Bean注入到Spring容器中了,用法很簡(jiǎn)單,在SpringConfiguration類中添加如下代碼即可:

@Beanpublic PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer(){ return new PropertySourcesPlaceholderConfigurer();}

具體測(cè)試結(jié)果,就自行測(cè)試了。上面例子介紹了properties的使用,下面我們將配置文件換成xml文件。配置如下:

<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE properties SYSTEM 'http://java.sun.com/dtd/properties.dtd'><properties> <entry key='jdbc.driver'>com.mysql.cj.jdbc.Driver</entry> <entry key='jdbc.url'>jdbc:mysql://127.0.0.1:3306/test</entry> <entry key='jdbc.userName'>root</entry> <entry key='jdbc.password'>xiaohu</entry></properties>

然后將JdbcProperties類上的注解的配置文件換成xml文件。

@PropertySource(value = 'classpath:jdbc.properties')

其他不用調(diào)整,執(zhí)行測(cè)試類,輸出的結(jié)果一樣。因?yàn)樯厦娼榻B到@PropertySource默認(rèn)支持properties與xml的配置文件。我們可以查看PropertySourceFactory的默認(rèn)實(shí)現(xiàn)DefaultPropertySourceFactory源碼

public class DefaultPropertySourceFactory implements PropertySourceFactory {@Overridepublic PropertySource<?> createPropertySource(@Nullable String name, EncodedResource resource) throws IOException {return (name != null ? new ResourcePropertySource(name, resource) : new ResourcePropertySource(resource));}}

然后進(jìn)入ResourcePropertySource類,源碼這里使用了一個(gè)三元運(yùn)算符,如果name為空,就使用默認(rèn)Spring默認(rèn)生成的name。

public ResourcePropertySource(String name, EncodedResource resource) throws IOException {super(name, PropertiesLoaderUtils.loadProperties(resource));this.resourceName = getNameForResource(resource.getResource());}public ResourcePropertySource(EncodedResource resource) throws IOException {super(getNameForResource(resource.getResource()), PropertiesLoaderUtils.loadProperties(resource));this.resourceName = null;}

這里可以看到調(diào)用了PropertiesLoaderUtils.loadProperties方法,進(jìn)入到源碼

public static Properties loadProperties(EncodedResource resource) throws IOException {Properties props = new Properties();fillProperties(props, resource);return props;}

會(huì)調(diào)用fillProperties的方法,一直跟到調(diào)用最低的fillProperties方法。

static void fillProperties(Properties props, EncodedResource resource, PropertiesPersister persister)throws IOException {InputStream stream = null;Reader reader = null;try {String filename = resource.getResource().getFilename();if (filename != null && filename.endsWith(XML_FILE_EXTENSION)) {stream = resource.getInputStream();persister.loadFromXml(props, stream);}else if (resource.requiresReader()) {reader = resource.getReader();persister.load(props, reader);}else {stream = resource.getInputStream();persister.load(props, stream);}}finally {if (stream != null) {stream.close();}if (reader != null) {reader.close();}}}

第一個(gè)if判斷文件后綴是否是xml結(jié)尾,常量XML_FILE_EXTENSION如下:

private static final String XML_FILE_EXTENSION = '.xml';

除了支持properties與xml的配置文件方式,也支持yml配置文件的方式,不過(guò)需要自定義解析工廠,下面來(lái)實(shí)現(xiàn)怎么解析yml配置文件。引入可以解析yml文件的第三方庫(kù)

<dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <version>1.28</version></dependency>

創(chuàng)建yml解析工廠YamlPropertySourceFactory實(shí)現(xiàn)PropertySourceFactory

public class YamlPropertySourceFactory implements PropertySourceFactory { @Override public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {YamlPropertiesFactoryBean factoryBean = new YamlPropertiesFactoryBean();factoryBean.setResources(resource.getResource());Properties properties = factoryBean.getObject();return name != null ? new PropertiesPropertySource(name, properties) : new PropertiesPropertySource(resource.getResource().getFilename(), properties); }}

然后將JdbcProperties類的@PropertySource換成如下寫法:

@PropertySource(value = 'classpath:jdbc.yml',factory = YamlPropertySourceFactory.class)

執(zhí)行測(cè)試類,輸出結(jié)果與上面結(jié)果一樣

打印獲取到的配置信息:JdbcProperties(driver=com.mysql.cj.jdbc.Driver, url=jdbc:mysql://127.0.0.1:3306, userName=root, password=xiaohu)org.springframework.jdbc.datasource.DriverManagerDataSource@58695725

證明我們自定義的解析yml配置文件就成功了。

到此這篇關(guān)于Spring的@PropertySource注解使用的文章就介紹到這了,更多相關(guān)Spring的@PropertySource注解使用內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品一区亚洲| 男人天堂欧美日韩| 人人精品久久| 国产精品chinese| 精品网站aaa| 亚洲高清二区| 亚洲天堂av资源在线观看| 在线精品视频一区| 日韩av字幕| 狠狠久久伊人| 国产韩日影视精品| 亚洲资源在线| 欧美激情 亚洲a∨综合| 在线中文字幕播放| 9久re热视频在线精品| 日韩手机在线| 极品av在线| 蜜臀a∨国产成人精品| 国产精品一级在线观看| 亚洲va中文在线播放免费| 日韩亚洲精品在线| 97se亚洲| 国产精品蜜芽在线观看| 亚洲深爱激情| 国产精品一区二区三区av| 欧洲一级精品| 日韩三区四区| 日本久久成人网| 日韩av一区二区在线影视| 日韩伦理在线一区| 亚洲人成精品久久久| 美女视频免费精品| 亚洲欧洲一区| 精品欧美视频| 在线日韩成人| 超级白嫩亚洲国产第一| 伊人久久大香伊蕉在人线观看热v| 国产美女久久| 亚洲精品2区| 精品视频一区二区三区四区五区 | 欧美日韩视频免费观看| 三级一区在线视频先锋| 精品视频自拍| 亚洲欧美网站| 国产成人a视频高清在线观看| 日韩一区二区久久| 免费在线观看一区| 久久99伊人| 激情综合五月| 亚洲九九精品| 免费视频一区三区| 精品国产欧美日韩一区二区三区| 三级欧美在线一区| 久久久一二三| 久久香蕉网站| 日本vs亚洲vs韩国一区三区二区| 欧美日韩一二三四| 久久久久久久久成人| 亚洲精品无吗| 亚洲在线电影| 久久久久国产| 97精品国产| 麻豆91精品91久久久的内涵| 国产农村妇女精品一区二区| 国产资源在线观看入口av| 国产一精品一av一免费爽爽| 三级亚洲高清视频| 尤物tv在线精品| 成人国产精品久久| 美女视频黄久久| 国产伦理一区| 欧美日一区二区三区在线观看国产免| 久久xxxx| 亚洲激情中文在线| 欧美亚洲国产激情| 亚洲一级少妇| 青青青免费在线视频| 精品视频在线一区二区在线| 不卡在线一区二区| 天堂av在线| 欧美激情另类| 麻豆精品国产91久久久久久| 久久狠狠久久| 国产日韩视频在线| 日本精品久久| 国产欧美综合一区二区三区| 欧美日本不卡| 国产日产一区| 国产另类在线| 九九九精品视频| 国产精品不卡| 色婷婷色综合| 日韩欧美午夜| 超碰在线99| 中文在线а√在线8| 欧美aa在线观看| 日韩av一级| 美女少妇全过程你懂的久久| 久久网站免费观看| 欧美.日韩.国产.一区.二区| 日韩精品免费一区二区在线观看| 日韩精品第一区| 亚洲高清成人| 国产精品呻吟| 日韩av在线免费观看不卡| 青青青国产精品| 精品国产亚洲日本| 日本蜜桃在线观看视频| 99精品视频在线| 欧美日韩视频免费观看| 欧美/亚洲一区| 免费日韩视频| 欧美在线黄色| 欧美国产亚洲精品| 国产传媒av在线| 亚洲激情二区| 日韩激情综合| 美腿丝袜在线亚洲一区| 国产白浆在线免费观看| 999国产精品视频| 亚洲一区二区三区高清不卡| 日韩有码av| 日韩不卡一区| 影音先锋国产精品| 免费观看在线综合色| 欧美日本三区| 91欧美国产| 国产偷自视频区视频一区二区| 色综合视频一区二区三区日韩 | 欧美成人午夜| 免费观看在线综合色| 国产亚洲精aa在线看| yellow在线观看网址| 亚洲综合精品| 久久99久久人婷婷精品综合| 欧美成人基地 | 欧美日韩国产观看视频| 日韩视频不卡| 国产精品欧美一区二区三区不卡| 樱桃视频成人在线观看| 丝袜美腿亚洲色图| 国产精品国码视频| 在线一区电影| 免费在线观看一区| 合欧美一区二区三区| 国产精品片aa在线观看| 不卡av一区二区| 精品国产乱码久久久| 亚洲欧美视频| 日韩综合在线| 日韩在线成人| 欧美91精品| 久久gogo国模啪啪裸体| 在线一区免费观看| 国产aⅴ精品一区二区三区久久| 亚洲少妇在线| 日韩国产欧美| 国产乱码精品一区二区三区亚洲人| 在线成人动漫av| 国产精品成人**免费视频 | 九九色在线视频| 午夜亚洲福利| 91亚洲国产成人久久精品| 尤物精品在线| 成人在线视频中文字幕| 日韩中出av| 香蕉精品久久| 精品久久97| 亚洲婷婷丁香| 99精品在线| 成人污污视频| 久久精品97| 视频一区中文字幕国产| 福利片在线一区二区| 久久国产尿小便嘘嘘| 日韩一区二区免费看| 蜜桃视频在线网站| 精品久久影院| 欧美一级二级三级视频| 丝瓜av网站精品一区二区| 久久国产直播| 四季av一区二区凹凸精品| 国产精品久久久网站| 日本中文字幕视频一区| 欧美在线综合| 亚洲一区二区三区免费在线观看| 成人久久一区| 日韩一区二区在线免费| 精品精品99| 久久精品三级| 久久精品亚洲一区二区| 国产欧美精品| 国产欧美综合一区二区三区| 少妇精品在线| 亚洲久久一区| 日韩精品免费视频一区二区三区| 热久久久久久久| 在线日韩成人| 日韩综合小视频| 欧美日本精品|