如何通过ApplicationContext访问属性

时间:2011-10-19 14:42:49

标签: java spring

在Spring ApplicationContext中使用属性文件时,可以通过以下方式访问其属性:xml配置文件中的$ {someproperty}。但是如何在不通过xml注入的情况下访问java代码中的相同属性?

ApplicationContext config

<?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.0.xsd
         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    <bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="myapp.properties" />
    </bean>
    <bean class="my.app.MyClass">
        <property name="foo" value="${someproperty}" />
    </bean>
</beans>

属性

someproperty=somevalue

更新1
实际的这一点是一种特殊情况,其中应用程序的唯一ID在属性文件中设置(ez由sysadmin编辑)。一些应用程序类实现了ApplicationContextAware,因此它们可以访问上下文并防止在每个类中注入或为每个我们想要ez属性访问方法的类定义bean。在这种情况下,我们的应用程序“了解”Spring并不是问题。

3 个答案:

答案 0 :(得分:3)

访问一个属性没有任何意义,它与IoC原则相矛盾,这是Spring的主要目标。除了其他答案,您可能需要所有房产吗?在这种情况下,有一个PropertiesFactoryBean对象可以让您Properties对象访问所有属性。

PropertyPlaceholderConfigurer bean旨在替换spring上下文中的占位符。任何其他用法至少令人困惑。

答案 1 :(得分:1)

好的样式让你的代码尽可能少地了解Spring,但你可以通过@Value注释(假设你使用Spring 3)将它注入到属性或构造函数中(取决于如何你建立你的豆)。否则,你可以从webapp的配置中选择它,但根据我的经验,它更容易出错。 (使用Spring执行此操作的另一个好处是,它可以轻松地将来自多个不同源的属性与复杂的覆盖规则合并。手动执行此操作很痛苦。)

答案 2 :(得分:0)

我会获取placeHolderConfig bean(例如从applicationContext或通过注入它),PropertyPlaceholderConfigurer有一个访问方法,看看这里:

http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/beans/factory/config/PropertyResourceConfigurer.html#convertPropertyValue(java.lang.String