spring'<props>'是否支持'#{myprops ['abc']}'表达式?</props>

时间:2013-12-26 10:03:39

标签: java spring

我定义了一个属性持有者:

<util:properties id="myProps" location="file:my.properties" />

然后我可以在#{}中使用<property>表达式:

<bean id="mybean" class="test.MyBean">
    <property name="hello" value="#{ myProps['hello'] }"/>
</bean>

但是当我定义这个bean时:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="myDataSource"/>
    <property name="packagesToScan" value="test.domain"/>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.show_sql">#{ myProps['db.timeout']}</prop>
        </props>
    </property>
</bean>

我的Intellij-IDEA标记#{ myProps['db.timeout']}为红色,并有提示:

Can't resolve symbol: #{ myProps['db.timeout']}

是否支持#{}表达式?以及如何解决这个问题?


感谢subhashis的答案,但我忘了提到由于某些设计限制,我不能在项目中使用org.springframework.beans.factory.config.PropertyPlaceholderConfigurer

1 个答案:

答案 0 :(得分:0)

是的,它支持表达式,但不使用#use $,请参阅下面的示例

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">


    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location">
           <value>database.properties</value>
        </property>
    </bean>
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="driverClassName" value="${jdbc.driverClassName}" />
            <property name="url" value="${jdbc.url}" />
            <property name="username" value="${jdbc.username}" />
            <property name="password" value="${jdbc.password}" />
     </bean>