Почему во время автоматической проводки мой пользовательский компонент ведения журнала аннотаций имеет значение NULL? - PullRequest
1 голос
/ 28 сентября 2011

Я создал пользовательскую аннотацию для регистрации, следуя примеру в этом сообщении в блоге почти точно.Основное отличие, которое я вижу, состоит в том, что мой LoggerInjector помечен @Component.

. Аннотация отлично работает, и я получаю ненулевой экземпляр Logger везде, кроме одного случая: когда я пытаюсь войти в системуметод, аннотированный @Autowired.

Например:

@Repository
public class MyDao
{
    @AutowiredLogger
    private Logger _logger;

    private JdbcTemplate _jt;

    @Autowired
    public void setDatasource(DataSource ds)
    {
        _logger.debug("Entering setDs")
        _jt = new JdbcTemplate(ds);
        _logger.debut("Exiting setDs);
    }
}

A NullPointerException выбрасывается в первую строку _logger.debug().

Фрагмент из applicationContext.xml:

<mvc:annotation-driven />
<context:component-scan base-package="my.package" />

Фрагмент из dispatch-servlet.xml:

<mvc:annotation-driven />
<context:component-scan base-package="my.package">
    <context:include-filter type="annotation"
             expression="org.springframework.stereotype.Repository" />
</context:component-scan>

Как мне сделать инъекцию @AutowiredLogger до запуска методов @Autowired?

1 Ответ

4 голосов
/ 28 сентября 2011

Я не думаю, что вы можете контролировать, какой компонент будет автоматически подключен первым.Альтернативное решение - использовать InitializingBean для настройки класса после того, как все было установлено.

Вы могли бы что-то вроде

@Override
void afterPropertiesSet() {
    _logger.debug("Entering setDs")
    _jt = new JdbcTemplate(ds);
    _logger.debut("Exiting setDs);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...