如何在Java SE项目中使用PropertyPlaceholderConfigurer

时间:2014-04-16 08:55:42

标签: java spring properties

我在下面有弹簧配置,可以在java Classess的文件中使用访问权限。 JavaEE项目有很多种方法,如下所示:

<context:component-scan base-package="com.service.pack" />
    <context:property-placeholder properties-ref="appProperties"/>

我能够在java SE项目中使用上面的方法,所以尝试了PropertyPlaceholderConfigurer类,但此时从PropertyPlaceholderConfigurer类中看不到applicationProperties bean,因此propertiesMap为null。

我做错了什么?是否有一种简单的方法可以从类文件中加入属性,如javaee projects

<bean id="applicationProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="classpath:app.properties"/>
</bean>



@Component
public class PropertiesUtil extends PropertyPlaceholderConfigurer {
   private static Map<String, String> propertiesMap;

   @Override
   protected void processProperties(ConfigurableListableBeanFactory beanFactory,
             Properties props) throws BeansException {
        super.processProperties(beanFactory, props);

        propertiesMap = new HashMap<String, String>();
        for (Object key : props.keySet()) {
            String keyStr = key.toString();
            propertiesMap.put(keyStr, parseStringValue(props.getProperty(keyStr),
                props, new HashSet()));
        }
    }

    public static String getProperty(String name) {
        return (String) propertiesMap.get(name);
    }
}

1 个答案:

答案 0 :(得分:0)

我不确定您要尝试做什么,但在上面的示例项目中,PropertiesUtilPropertyPlaceholderConfigurer延伸,但您的XML配置是指PropertyPlaceholderConfigurer而不是您的子类。所以,如果这就是你所拥有的,那么你的课程甚至都没有被调用。

我在本地尝试使用以下配置并且它有效:

<bean id="applicationProperties" class="com.foo.yourpackage.PropertiesUtil">
    <property name="location" value="classpath:app.properties"/>
</bean>

现在,我了解到您正在尝试访问代码中的属性。Environment抽象具备您需要的所有内容,请查看this blog postjavadoc of Environment以获取更多详细信息。