zoukankan      html  css  js  c++  java
  • spring管理属性配置文件properties——PropertiesFactoryBean和PropertyPlaceholderConfigurer的区别

    对于属性配置,一般采用的是键值对的形式,如: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

  • 相关阅读:
    event.preventDefault() 火狐下没有作用。
    输入框禁止键盘输入数字意外的字符
    js遍历数组重复值和数组中对象重复值
    js获取30、X天前得时间
    docker 命令详解
    右键禁止浏览器自带的右键
    Kncokout之绑定事件三
    转:Maven的默认中央仓库以及修改默认仓库&配置第三方jar包从私服下载
    异常: java.security.InvalidKeyException: Illegal key size
    转:Java并发编程:深入剖析ThreadLocal
  • 原文地址:https://www.cnblogs.com/chenny3/p/10226192.html
Copyright © 2011-2022 走看看