@Получено на поле и на методе сеттера

У меня была странная ситуация, когда у меня были свойства автообучения моего компонента. @Autowired put on setter method не работает должным образом, и поле, соответствующее этому setter, возвращает мне NullPointerException когда я пытаюсь получить доступ к некоторым из его методов. С другой стороны, @Autowired put on field напрямую работает нормально.

Какова может быть причина такого поведения и в чем разница между помещением @Autowired в поле и соответствующим соответствующим сеттером?

Вот выдержка из моего кода:

private JdbcOperations jdbcTemplate;
protected JdbcOperations getJdbcTemplate() { return jdbcTemplate;
}
@Autowired
@Qualifier("jdbcTemplate")
public void setJdbcTemplate(JdbcOperations jdbcTemplate) { this.jdbcTemplate = jdbcTemplate;
}

Вот из контекста:

<bean name="jdbcTemplate"> <constructor-arg ref="routingDataSource">
</constructor-arg></bean>

Большое спасибо за объяснения!

1 ответ

Если он работает в поле, он также работает и для сеттера.

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

Скорее всего, вы пропустили что-то еще. Вы случайно создали экземпляр этого класса с new ключевым словом во время тестирования инъекции сеттера? Или, jdbcTemplate не присутствовал в контексте, когда вы провели тест инжекции сеттера. Есть много возможностей...

licensed under cc by-sa 3.0 with attribution.