Spring: init-method, PostConstruct, afterPropertiesSet: когда использовать один над другим?
В spring bean существует много вариантов инициализации.
init-method, PostConstruct, afterPropertiesSet, bean пост-инициализация и даже класс конструктор. Все это можно использовать для инициализации bean.
Я запутался, когда использовал их над другим. Кроме того, есть ли какой-нибудь случай, который может понадобиться для использования всех этих параметров в одном Bean? Если да, пожалуйста, пример будет хорошим.
Надеюсь, вы получите отличные ответы.
Ответы
Ответ 1
Разница между использованием конструктора и другими параметрами заключается в том, что код конструктора является первым, который будет выполняться, тогда как другие параметры будут вызываться только после того, как зависимости были введены в bean (либо из @Autowired или XML файл).
Код, который вы пишете в конструкторе, будет выполняться, пока свойства bean еще не запущены. Все поля @Autowired будут null. Иногда это то, что вы хотите, но обычно вы хотите, чтобы код запускался после установки свойств.
Кроме этого, я не вижу разницы, кроме того порядок выполнения. Я не думаю, что есть случай, когда вы захотите иметь все параметры в одном классе.
Ответ 2
Я предлагаю вам использовать конструктор только там, где это возможно. Для этого есть одна очень веская причина: тестирование
Когда вы перейдете к unit test a Spring bean, вы захотите построить класс с минимальной суматохой. Это означает, что вам нужно только вызвать конструктор и не иметь дело с вызовом различных методов жизненного цикла самостоятельно. Последнее, что вы хотите создать класс для тестирования, заключается в том, чтобы знать, как объект инициализируется.
С поддержкой поддержки конструктора Spring вы можете легко вставлять в конструктор другие другие beans или свойства проекта, чтобы иметь возможность охватывать практически каждый сценарий.