Spring 3.0.5不会从属性中评估@Value注释

时间:2011-03-11 16:42:39

标签: spring frameworks properties autowired

尝试在 Spring 3.0.5.RELEASE 中自动将属性连接到bean,我正在使用:

  • config.properties

    username=myusername
    
  • main-components.xml

    <context:property-placeholder location="classpath:config.properties" />
    
  • MyClass的:

    @Service
    public class MyClass {
    
        @Value("${username}")
        private String username;
        ...
    }
    

因此,用户名设置为字面上 "${username}",因此表达式不会被解析。我对此类的其他自动连接依赖项进行了设置,Spring不会抛出任何异常。我还试图添加@Autowired,但它没有帮助。

如果我将属性解析为单独的bean,然后使用@Autowired + @Qualifier,则可以:

<bean id="username" class="java.lang.String">
    <constructor-arg value="${username}"/>
</bean>

任何想法如何仅使用@Value?也许我需要包含一些我没有的Spring依赖项?谢谢

1 个答案:

答案 0 :(得分:20)

发现问题所在。复制/粘贴评论:

您确定在与MyClass bean相同的应用程序上下文中有<context:property-placeholder>(不在父上下文中)吗? - axtavt

你是对的。我将<context:property-placeholder>ContextLoaderListener定义的上下文移动到servlet上下文。现在我的值被解析了。非常感谢! - alex