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 или свойства проекта, чтобы иметь возможность охватывать практически каждый сценарий.