Модификаторы доступа методов с аннотациями @PostConstruct и @PreDestroy
Очень часто вижу в коде по инициализации бинов модификатор public у методов с аннотациями @PostConstruct и @PreDestroy.
Разве это не нарушает инкапсуляцию? Ведь эти методы не должны быть доступны никому кроме контекста спринга.
Не правильнее было бы их сделать private? Допускается ли использовать public и почему?
Ответы (1 шт):
Нет, это не проблема.
Методы помеченные @PostConstruct и @PreDestroy являются частью открытого интерфейса вашего класса, так как только с помощью них можно правильно создать или уничтожить объект, а значит они должны быть доступны клиентам класса. И у вас обычно больше одного клиента - второй это тесты.
Важное замечание касательно @PostConstruct: что если возникла необходимость использовать эту аннотацию, то это уже признак проблем в дизайне. По хорошему, инициализация и установка инвариантов должна происходить в конструкторе. То есть нужно использовать внедрение зависимостей через конструктор и не использовать @PostConstruct вообще и внедрение зависимостей через сеттеры, что может приводить к не полностью инициализированному объекту.