В проекте, над которым я работаю, структура DAOs
аналогична приведенной ниже:
/**
* Base DAO class
*/
@Transactional
public class JPABase {
@PersistenceContext
private EntityManager entityManager;
public void persist(Object entity) {
entityManager.persist(entity);
}
//some more methods in here
}
а также
/**
* Generic DAO class implementation
*/
@Transactional
public abstract class GenericDao extends JpaBase {
//some methods in here
}
а также
/**
* Specialized DAO class
*/
@Repository
@Transactional
public class PersonDao extends GenericDao {
//some methods in here
}
До сих пор в проекте использовалось ткачество времени компиляции, но конфигурация была изменена на использование <context:load-time-weaver/>
с -javaagent:/opt/tomcat7-1/lib/spring-instrument.jar
.
Поскольку это изменение было применено, аннотации JpaBase
и @Transactional
@Transactional
больше не переплетаются. Каждый раз, когда класс обслуживания вызывает метод persist
для объекта PersonDao
, транзакция не запускается.
Примечательно:
- раньше это работало, когда использовалось ткачество времени компиляции.
- все методы, которые определены в
PersonDao
, сплетены правильно, но унаследованные (например,persist(Object entity)
) НЕ переплетены.
Предполагается, что переплетение времени компиляции и переплетение времени загрузки делают одно и то же, только в разные моменты времени. Почему изменилось поведение ткачества?
within
элемента<include>
в файлеaop.xml
. - person Anca N   schedule 01.07.2015META-INF/aop.xml
файл на пути к классам (на войне, а не банку?), Либо активировать его другим способом с помощью кода. Для включения ткачество во время загрузки для получения дополнительной информации. - person Marco   schedule 21.10.2015