2014-11-17 3 views
2

У меня есть следующие сомнения относительно весны @PostConstruct и @PreDestroy аннотации метода.Являются ли аннотации метода Spring @PostConstruct и @PreDestroy формой АОП?

Так @PostConstruct аннотацию означает, что annoted метод автоматически выполняется после создания объекта и после инъекции в зависимости делается с помощью сеттеры metthod

@PreDestroy автоматически выполняется перед, когда ApplicationContext является закрыто.

Моих сомнений: являются @PostConstruct и @PreDestroy Аннотации формы АОПА или нет?

+0

Нет ... Это не так. –

ответ

2

AOP - это парадигма программирования , см. here. Если я правильно понял ваш вопрос, вы спрашиваете: «@PostConstruct и @PreDestroy» в области АОП. Мой ответ будет да, по крайней мере потому, что они разработаны с использованием Reflection, который не является ООП.

Примечание:

АОП включает в себя методы программирования и инструменты, которые поддерживают модуляризацию проблем на уровне исходного кода.

+0

Tnx, я имею в виду, что мне кажется, что эти 2 аннотации находятся в области AOP, потому что когда это выполняется конкретное событие (после того, как конструкция объекта и интригация setter для @PostConstruct и до того, как ApplicationContext будет закрыт для @PreDestroy) аннотированный метод автоматически выполняется. Правильно ли я рассуждаю? – AndreaNobili

+1

Да, правильно. – Maksym

3

Оба являются частью спецификаций EE и не из весны.

Для получения более подробной информации, пожалуйста, обратитесь к соответствующим документам here и here.

+0

Обе аннотации определены как часть спецификации J2EE. Однако Spring позволяет использовать те же стандартные аннотации для собственных (не EE) целей. –

0

Как отметил Бонд, это Java EE аннотаций, не яровых - однако, как со многими примечаниями, Spring поддерживает их (так же, как Спрингс @Autowired против EE @Inject и т.д.).

Я бы не сказал, однако, что отражение не является ООП - хотя это, возможно, идет вразрез с чистой инкапсуляцией, оно является неотъемлемой частью основных языков ООП по уважительным причинам. Использование рефлексии также не подразумевает АОП.

AOP обычно используется для вызова чего-либо до/после/вокруг метода - кода, который там не виден - и часто представлен аннотацией (например, Springs @Transactional), но может быть также объявлен в другом месте (конфигурация). @PostConstruct и @PreDestroy - это, в первую очередь, методы жизненного цикла, такие как крючки, которые будут происходить в определенное время, - и все, что они делают, явно указано в коде.

Таким образом, нет никакого аспекта, спрятанного там, определенно никакого аспекта в типичном значении АОП. Единственное, что скрыто, это волшебство, которое называет его в нужный момент. Но пока Java не поддерживает AOP напрямую, не нужна библиотека AOP, простое отражение. Я сомневаюсь, что кто-нибудь будет называть JVM's shutdown hooks AOP.