日期:2014-05-17  浏览次数:20867 次

spring placeholderConfig的问题
项目中用到spring框架,我用placeholderConfig读取了一个properties文件

<bean id="placeholderConfig"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location"
value="classpath:com/xxxx/yyy/init.properties">
</property>
</bean>


这样我可以在其它配置文件中用${key}来取到init.properties里面的值
现在我想在一个java代码(当然都是同一个web工程)中去取其中的某个key所对应的value,该怎么去取呢,我之前想过再去加载一次init.properties文件,但是即然spring己经加载了,有没有办法取到呢,我试了System.getProperty(key)不行,或者spring有没能其它类似的东西可以做到?
------最佳解决方案--------------------
楼主的意思是。spring已经加载了资源文件。程序里如果直接获取资源文件里面的值。
------其他解决方案--------------------
不知道你是这个意思不?
<bean id="aaa">
<constructor-arg
            value="bbbbb" />
</bean>

1.首先用ConfigurableListableBeanFactory beanFactory拿到定义的bean的名字:
   

   String[] beanNames = beanFactory.getBeanDefinitionNames();
   

   
2.  一层一层的去取,最终得到value
    

     for (String beanName : beanNames) {
        BeanDefinition bd = beanFactory.getBeanDefinition(beanName);
        ConstructorArgumentValues cavs = bd.getConstructorArgumentValues();
        List lst = cavs.getGenericArgumentValues();
        Iterator it = lst.iterator();
        while (it.hasNext()) {
           ValueHolder vh = (ValueHolder) it.next();
           TypedStringValue tsv = (TypedStringValue) vh.getValue();
           System.out.println(tsv.getValue());//输出bbbbb
        }
    }
    

    
------其他解决方案--------------------

<sqlMapConfig>
<properties resource="com/xxxx/yyy/init.properties"/>
<typeAlias alias="order" type="testdomain.Order"/>
<!-- JDBC -->
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property value="${MyDriver}" name="JDBC.Driver"/>
<property value="${MyDriver}" name="JDBC.ConnectionURL"/>
<property value="${MyDriver}" name="JDBC.Username"/>
<property value="${MyDriver}" name="JDBC.Password"/>
<property name="JDBC.DefaultAutoCommit" value="true" />
</dataSource>
</transactionManager>

像这样?
------其他解决方案--------------------
一般我们是这样配置的..

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath*:config/jdbc.properties</value>
<value>classpath*:config/hibernate.properties</value>
<value>classpath*:config/uamsHibernate