Возьмем следующие фрагменты кода в качестве примера. легкий способ:
@PersistenceContext
private EntityManager em;
@Transactional
public void save(Object obj) {
em.persist(obj);
}
Традиционный способ (вы можете управлять транзакциями, используя интерфейс EntityManager
, но это не главное):
@PersistenceContext
private EntityManager em;
@Resource
private AbstractPlatformTransactionManager transactionManager;
public void save(final Object obj) {
new TransactionTemplate(transactionManager).execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(TransactionStatus status)
{
em.persist(obj);
}
});
}
Какое это имеет отношение к АОП? Управление транзакциями является одним из наиболее широко используемых примеров АОП, и Spring не является исключением. Первый фрагмент кода использует аннотацию @Transactional
для применения демаркации транзакции с использованием аспекта, а второй управляет транзакциями вручную. Видите выгоду?
Ключевой момент: используйте аспекты для сквозных задач, таких как ведение журнала, профилирование и т. Д. Не выстраивайте свою бизнес-логику в аспектах. Таким образом, ваши компоненты остаются ясными, а нерелевантный код с точки зрения бизнеса скрыт в аспекте.
Кроме того, АОП позволяет вам делать все виды сложных вещей с легкостью. Возьмем, к примеру, обработку сеанса HTTP - с областью действия session
и проксированием AOP вы можете получить доступ к сеансу даже не осознавая этого.
Подводя итог - это отличный инструмент для правильной работы.