Я пытался реализовать методы @PostConstruct
и @PreDestroy
в моем классе Account
. Ни один из них не работал в следующей ситуации, но для краткости я буду говорить только о @PostConstruct
.
Я использую программы чтения Spring Batch для загрузки этих учетных записей из файла фиксированной длины. Пока все хорошо, за исключением случаев, когда мой ридер создает эти учетные записи, он, по-видимому, не вызывает метод @PostConstruct
(отладочные точки останова никогда не активируются, а сообщения журнала не распечатываются).
Читатель является пользовательским только в том смысле, что это пользовательский класс, расширяющий FlatFileItemReader<Account>
и устанавливающий значения в конструкторе.
Добавление точно такого же метода инициализации (который никогда не вызывался в классе Account
) к самому считывателю работает просто отлично.
Т.е. если метод @PostConstruct
должен вызываться при инициализации reader, он работает. Только не тогда, когда читатель сам инициализирует учетные записи, аннотированные с помощью @PostConstruct
.
Если я добавлю точку останова или сообщение журнала непосредственно в конструкторе Account
, это также работает без проблем.
Является ли это желаемым поведением Spring Batch? Или это может быть вызвано какой-либо моей конфигурацией?
В ответе на другой вопрос упоминается, что такие аннотации, как @PostConstruct
, "применяются только к bean-компонентам, управляемым контейнером" , а не если "вы просто звоните new BlogEntryDao()
себе".
Это то, что здесь происходит - Spring Batch вызывает new Account(...)
напрямую, не регистрируя их в контейнере? В конце концов, у меня никогда не было этих учетных записей в виде bean-компонентов или чего-то еще.
Account
представляет собой строку файла, то какую дополнительную логику необходимо выполнить в конструкции post или в методе pre destroyAccount
? Действительно ли эта логика принадлежитAccount
? Какова логика? - person Andrew S   schedule 07.09.2018PostConstruct
иPreDestroy
и случайным образом выбрал этот класс. На самом деле я не уверен, есть ли реальный вариант использования, когда эти методы были бы предпочтительнее, чем еще один шаг в работе. Тем не менее, мне любопытно, почему они не называются. - person PixelMaster   schedule 07.09.2018