通过XML配置时,自动装配不起作用

时间:2013-09-09 20:04:40

标签: spring autowired

class ConfigurationDetails {
    private @Resource String esHostURL;
    private @Resource int maxMessageCounter;
    private @Resource String queueName;
   // Assume : This class has all getter and setter methods and a default constructor
}

另一个班级

public class SpringMessageListener implements MessageListener {
    @Resource ConfigurationDetails configDetails; // With getter and setter method for this
............
..........

在我的XML中

<bean id="aListener" class="com.vzw.es.cosumer.SpringMessageListener" autowire="byName"/>
<bean id="configDetails" class="com.vzw.es.pojo.ConfigurationDetails"  autowire="byName">
    <property name="esHostURL" value="http://obsgracstg-db0.odc.vzwcorp.com:9200"/>
    <property name="maxMessageCounter" value="500"/>
    <property name="queueName" value="ES_queue"/>
</bean>

现在,带有id configDetails的bean没有得到自动装配,这意味着当我调试代码并看到SpringMessageListerner类中的configDetails时它显示为null。但是当我明确地执行appContext.getBean(“configDetails”)时,它给了我非空对象。

为什么自动装配不起作用?我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

默认情况下,Spring不会查找@Autowired@Resource@Inject注释以自动装配您的bean。你需要告诉它用

寻找它们
<context:component-scan base-package="com.yourpackage.some" />
// or, in this case, <context:annotation-config />

这样,Spring将扫描包中的类并注入存在@Autowired@Resource的bean。

不要忘记添加名称空间声明

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.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd">

更重要的是

class ConfigurationDetails {
    private @Resource String esHostURL;
    private @Resource int maxMessageCounter;
    private @Resource String queueName;
   // Assume : This class has all getter and setter methods and a default constructor
}

虽然您可以自动装配Stringint类型,但这通常被视为不良做法。而是在此处删除@Resource注释,并为每个字段添加getter和setter。

property声明中的<bean>元素负责设置这些字段。