Spring @Value注释不起作用

时间:2014-03-26 20:24:53

标签: java spring

我的bean上没有设置用@Value注释的属性。

我的上下文和类位于另一个项目的类路径中的jar内。它的spring上下文导入我的spring上下文,我的spring上下文从类路径加载一个配置文件,并包含各种bean定义。

在任何地方都没有使用延迟加载,我的jar使用的是Spring 3.1.4,使用我的jar的项目使用的是Spring 3.2.3。

当外部项目加载它的上下文(导入我的)

时,会加载显示属性文件的记录器
[main] INFO  Loading properties file from class path resource [connector-config.properties] - (PropertyPlaceholderConfigurer.java:172:)

摘自我的春天背景:

<bean id="propertyConfigurer"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
    lazy-init="false">
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
    <property name="ignoreResourceNotFound" value="true" />
    <property name="locations">
        <list>
            <value>classpath:connector-config.properties</value>
        </list>
    </property>
</bean>
...
    <!-- The actual beans referenced are not foo bar and com but should not be relevant to this issue -->
<bean id="requestGenerator" class="com.connector.RequestGenerator">
    <constructor-arg name="foo" ref="foo" />
    <constructor-arg name="bar" ref="bar" />
    <constructor-arg name="com" ref="com" />
</bean>

使用我的jar

在项目的类路径上的配置文件
ruleType=PAUL
response.poolSize=10
ack.poolSize=10
#This needs to be in minutes
max.run.time=100
base.dir=\\

来自外部项目的类从我的上下文加载bean: 通过在Eclipse调试模式下检查requestGen对象,我可以看到属性ruleType为null。鉴于上述属性文件,ruleType应为“PAUL”但它为null。

public class App
{
public static void main(Straing[] args)
{
    @SuppressWarnings("resource")
    ApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring-context.xml");
    RequestGenerator requestGen = context.getBean("requestGenerator", RequestGenerator.class);

2 个答案:

答案 0 :(得分:9)

@Value注释由AutowiredAnnotationBeanPostProcessor处理,如果您在XML中具有<component-scan><annotation-config>配置(或直接使用bean定义),则通常会注册<annotation-config>注释。您需要添加其中任何一个,可能是@Component,因为您已经说过您没有{{1}}个类。

答案 1 :(得分:3)

从Spring 3.1开始,不建议使用PropertyPlaceholderConfigurer来执行此类任务。有关详细信息,请参阅其JavaDoc

从另一方面,请显示您的connector-config.propertiesRequestGenerator的代码,以获取有关问题的更多信息。