Являются ли аннотации метода Spring @PostConstruct и метода @PreDestroy формой AOP?
У меня есть следующие сомнения, связанные с аннотациями метода Spring @PostConstruct и @PreDestroy.
Таким образом, аннотация @PostConstruct означает, что аннотированный метод автоматически выполняется после создания объекта и после внедрения зависимости с использованием метода setters.
@PreDestroy автоматически выполняется до закрытия ApplicationContext.
Я сомневаюсь: аннотации @PostConstruct и @PreDestroy являются формой АОП или нет?
3 ответа
АОП - это парадигма программирования, смотрите здесь. Если я правильно понимаю ваш вопрос, вы спрашиваете, являются ли они "@PostConstruct и @PreDestroy" в рамках AOP. Мой ответ - да, хотя бы потому, что они разработаны с использованием Reflection, а не ООП.
Замечания:
АОП включает в себя методы и инструменты программирования, которые поддерживают модульность задач на уровне исходного кода.
Как упоминал Бонд, это аннотации Java EE, а не Spring - однако, как и во многих аннотациях, Spring поддерживает их (как и Spring s). @Autowired
против EE @Inject
, так далее.).
Однако я бы не сказал, что рефлексия не является ООП - хотя она, возможно, идет вразрез с чистой инкапсуляцией, она является неотъемлемой частью основных языков ООП по веским причинам. Использование отражения также не подразумевает АОП.
AOP обычно используется для вызова чего-либо до / после / вокруг метода - кода, который там не виден - и часто представляется аннотацией (например, Spring s). @Transactional
), но также может быть объявлено в другом месте (конфигурация). @PostConstruct
а также @PreDestroy
с другой стороны, это в основном методы жизненного цикла, разновидности хуков, которые произойдут в определенное время - и все, что они делают, явно в коде.
Таким образом, там нет никакого скрытого аспекта, определенно нет аспекта в типичном значении АОП. Единственное, что скрыто, это магия, которая вызывает его в нужный момент. Но хотя Java не поддерживает AOP напрямую, библиотека AOP не нужна, просто простое отражение. Я сомневаюсь, что кто-нибудь также назвал бы отключение JVM AOP.