在我的bean的自动装配属性时,我遇到了一个奇怪的情况。 @Autowired put on setter方法无法正常工作,当我尝试访问某些方法时,与该setter对应的字段会返回NullPointerException
。另一方面,@ Autowired put on field直接工作正常。
这种行为的原因是什么?将@Autowired放在字段和字段的相应setter之间有什么区别?
以下摘自我的代码:
private JdbcOperations jdbcTemplate;
protected JdbcOperations getJdbcTemplate() {
return jdbcTemplate;
}
@Autowired
@Qualifier("jdbcTemplate")
public void setJdbcTemplate(JdbcOperations jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
以下是来自上下文:
<bean name="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg ref="routingDataSource"/>
</bean>
非常感谢您的解释!
答案 0 :(得分:1)
如果它适用于字段,它也适用于setter。
http://docs.spring.io/spring/docs/3.0.x/reference/beans.html#beans-autowired-annotation
很可能你错过了别的东西。在测试setter注入时,您是否偶然使用new
关键字创建了此类的实例?或者,当您进行二传手注射测试时,jdbcTemplate
在上下文中不存在。有很多种可能性......