Модификаторы доступа методов с аннотациями @PostConstruct и @PreDestroy

Очень часто вижу в коде по инициализации бинов модификатор public у методов с аннотациями @PostConstruct и @PreDestroy.

Разве это не нарушает инкапсуляцию? Ведь эти методы не должны быть доступны никому кроме контекста спринга.

Не правильнее было бы их сделать private? Допускается ли использовать public и почему?


Ответы (1 шт):

Автор решения: Roman Konoval

Нет, это не проблема.

Методы помеченные @PostConstruct и @PreDestroy являются частью открытого интерфейса вашего класса, так как только с помощью них можно правильно создать или уничтожить объект, а значит они должны быть доступны клиентам класса. И у вас обычно больше одного клиента - второй это тесты.

Важное замечание касательно @PostConstruct: что если возникла необходимость использовать эту аннотацию, то это уже признак проблем в дизайне. По хорошему, инициализация и установка инвариантов должна происходить в конструкторе. То есть нужно использовать внедрение зависимостей через конструктор и не использовать @PostConstruct вообще и внедрение зависимостей через сеттеры, что может приводить к не полностью инициализированному объекту.

→ Ссылка