从 Spring 个方面调用不同的代理方法
Call different proxyied method from Spring Aspect
我有两个不同的方面。如何确保从一个方面调用方法时,它仍然会通过代理链?
相关代码如下:
内在方面:
@Around("withinReplicatedRepository() && entityMethod() && insertMethod()")
public Object trackInsert(ProceedingJoinPoint jp) throws Throwable {
return trackChange(jp, ChangeType.INSERT, jp.getArgs()[0]);
}
外方面:
@Around("withinReplicatedRepository() && entityMethod() && autoSaveRepository() && saveMethod()")
public Object saveEntity(ProceedingJoinPoint jp) throws Throwable {
TransactionUtil.ensureTransactional();
Object entity = jp.getArgs()[0];
AutoSaveRepository repository = (AutoSaveRepository)jp.getTarget();
if (repository.exists(entity)) {
repository.update(entity);
} else {
repository.insert(entity);
}
return null;
}
用法:
AutoSaveRepository<MyEntity> repo = ...;
repo.save(entity);
我的问题是 jp.getTarget() 将 return 原始 class,因此 repository.insert() 不会被 trackInsert 捕获。
我有两个不同的方面。如何确保从一个方面调用方法时,它仍然会通过代理链?
相关代码如下:
内在方面:
@Around("withinReplicatedRepository() && entityMethod() && insertMethod()")
public Object trackInsert(ProceedingJoinPoint jp) throws Throwable {
return trackChange(jp, ChangeType.INSERT, jp.getArgs()[0]);
}
外方面:
@Around("withinReplicatedRepository() && entityMethod() && autoSaveRepository() && saveMethod()")
public Object saveEntity(ProceedingJoinPoint jp) throws Throwable {
TransactionUtil.ensureTransactional();
Object entity = jp.getArgs()[0];
AutoSaveRepository repository = (AutoSaveRepository)jp.getTarget();
if (repository.exists(entity)) {
repository.update(entity);
} else {
repository.insert(entity);
}
return null;
}
用法:
AutoSaveRepository<MyEntity> repo = ...;
repo.save(entity);
我的问题是 jp.getTarget() 将 return 原始 class,因此 repository.insert() 不会被 trackInsert 捕获。