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”)时,它给了我非空对象。
为什么自动装配不起作用?我错过了什么吗?
答案 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
}
虽然您可以自动装配String
和int
类型,但这通常被视为不良做法。而是在此处删除@Resource
注释,并为每个字段添加getter和setter。
property
声明中的<bean>
元素负责设置这些字段。