@Autowired在一个字段和一个setter方法

时间:2014-03-26 18:44:35

标签: spring autowired

在我的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>

非常感谢您的解释!

1 个答案:

答案 0 :(得分:1)

如果它适用于字段,它也适用于setter。

http://docs.spring.io/spring/docs/3.0.x/reference/beans.html#beans-autowired-annotation

很可能你错过了别的东西。在测试setter注入时,您是否偶然使用new关键字创建了此类的实例?或者,当您进行二传手注射测试时,jdbcTemplate在上下文中不存在。有很多种可能性......