您的位置:首页 > 编程语言 > Java开发

spring管理属性配置文件properties——PropertiesFactoryBean和PropertyPlaceholderConfigurer的区别

2017-03-17 20:16 1361 查看
对于属性配置,一般采用的是键值对的形式,如:key=value

属性配置文件一般使用的是XXX.properties,当然有时候为了避免eclipse把properties文件转码,放到服务器上认不出中文,可以采用XXX.conf的形式管理属性配置。

spring对于属性文件有自己的管理方式,通过spring的管理,可以直接使用@Value的方式直接得到属性值。

先使用org.springframework.beans.factory.config.PropertiesFactoryBean对属性配置文件进行管理。

 

1.新建一个Java project,命名spring_test;

2.导入jar包:

aopalliance-1.0.jar
commons-logging-1.1.1.jar
org.springframework.test-3.1.0.RELEASE.jar
spring-aop-3.1.1.RELEASE.jar
spring-asm-3.1.1.RELEASE.jar
spring-beans-3.1.1.RELEASE.jar
spring-context-3.1.1.RELEASE.jar
spring-context-support-3.1.1.RELEASE.jar
spring-core-3.1.1.RELEASE.jar
spring-expression-3.1.1.RELEASE.jar


3.在src下新建一个config.propertites:

author_name=lee


4.新建一个文件夹config;

5.新建一个app.conf:

project_info=项目


6.新建一个spring配置文件applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 
<context:annotation-config />
<context:component-scan base-package="com.*"></context:component-scan>

<!-- 使用注解注入properties中的值 -->
<bean id="setting"
class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="locations">
<list>
<value>classpath:*.properties</value>
<value>file:config/*.conf</value>
</list>
</property>
<!-- 设置编码格式 -->
<property name="fileEncoding" value="UTF-8"></property>
</bean>
</beans>


7.新建一个获取属性配置文件属性的类ConfigProperty.java:

package com.lee.property.test;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
* config.properties文件映射类
*
*
*/
@Component("configProperty")
public class ConfigProperty {

/** 作者名字 */
@Value("#{setting[author_name]}")
private String authorName;
/** 项目信息 */
@Value("#{setting[project_info]}")
private String projectInfo;

public String getAuthorName() {
return authorName;
}

public void setAuthorName(String authorName) {
this.authorName = authorName;
}

public String getProjectInfo() {
return projectInfo;
}

public void setProjectInfo(String projectInfo) {
this.projectInfo = projectInfo;
}

}


8.新建测试类:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:applicationContext.xml"})
public class ConfigPropertyTest {

@Resource(name = "configProperty")
private ConfigProperty configProperty;

/**
* 测试Spring注解获取properties文件的值
*/
@Test
public void test() {
System.out.println(configProperty.getAuthorName());
System.out.println(configProperty.getProjectInfo());
}

}


总结:

1.使用org.springframework.beans.factory.config.PropertiesFactoryBean获取属性的方式是:

@Value("${beanid['properties_key']}")


2.使用

<!-- 设置编码格式 -->
<property name="fileEncoding" value="UTF-8"></property>


主要为了解决属性文件中value为中文时乱码的问题。

 

spring管理属性配置文件properties——使用PropertyPlaceholderConfigurer

上一篇文章spring管理属性配置文件properties——使用PropertiesFactoryBean中提到使用org.springframework.beans.factory.config.PropertiesFactoryBean管理属性文件,在学习过程中发现通过org.springframework.beans.factory.config.PropertyPlaceholderConfigurer也可以管理配置文件。

1.在上一个项目(spring_test)的基础上新建spring配置文件applicationContext2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config />
<context:component-scan base-package="com.*"></context:component-scan>
<!-- <context:property-placeholder location="file:config/*.conf" ignore-unresolvable="true"/>
<context:property-placeholder location="classpath:*.properties" ignore-unresolvable="true"/> -->

<!-- 使用注解注入properties中的值 -->
<bean id="setting"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="ignoreUnresolvablePlaceholders" value="true" />
<property name="locations">
<list>
<value>classpath:*.properties</value>
<value>file:config/*.conf</value>
</list>
</property>
<!-- 设置编码格式 --> <property name="fileEncoding" value="UTF-8"></property>
</bean>
</beans>


2.修改ConfigProperty.java:

@Component("configProperty")
public class ConfigProperty {

/** 作者名字 */
@Value("${author_name}")
private String authorName;
/** 项目信息 */
@Value("${project_info}")
private String projectInfo;

public String getAuthorName() {
return authorName;
}

public void setAuthorName(String authorName) {
this.authorName = authorName;
}

public String getProjectInfo() {
return projectInfo;
}

public void setProjectInfo(String projectInfo) {
this.projectInfo = projectInfo;
}

}


3.新建测试类:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:applicationContext2.xml"})
public class ConfigPropertyTest {

@Resource(name = "configProperty")
private ConfigProperty configProperty;

/**
* 测试Spring注解获取properties文件的值
*/
@Test
public void test() {
System.out.println(configProperty.getAuthorName());
System.out.println(configProperty.getProjectInfo());
}

}


总结:

1.使用PropertiesFactoryBean管理属性文件获取属性的方式:

@Value("${properties_key}")


和org.springframework.beans.factory.config.PropertiesFactoryBean有点不同;

 

2.在spring配置文件中,对于bean的配置有这样一个配置:

<property name="ignoreUnresolvablePlaceholders" value="true" />


这个主要是为了解决抛出cannot be resolved的异常。

 

 

【转】 http://blog.csdn.net/lee0723/article/details/48715827

         http://blog.csdn.net/lee0723/article/details/48716515

其他关于此知识点的文章:
http://blog.csdn.net/caomiao2006/article/details/51813564 http://blog.csdn.net/qq_17805795/article/details/51647018 http://bjyzxxds.iteye.com/blog/427437
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐