我想通过Spring aop获取方法的异常,并且该方法注释@Transactional
注释。
当我插入DB中的记录时,它将抛出异常,但是aop无法捕获
例外。双重代理问题?外部代理是Transaction,内部代理是aop?
任何想法?
@Override
@Transactional
public boolean doInsert(Object domainObject) throws Exception {
boolean success = false;
if (beforeInsert(domainObject)) {
if (insert(domainObject)) {
success = afterInsert(domainObject);
}
}
return success;
}
@AfterThrowing(value = "execution(* com.digiwin.newb2.patterns.Nb2ProgramService.doInsert(..))", argNames="retVal", throwing="retVal")
public void doInsertThrowException(Exception ex) {
int index = 0;
}
插入记录抛出异常但不触发aop ...
org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; nested exception is org.hibernate.exception.DataException: could not execute statement
at org.springframework.orm.hibernate4.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:143)
at org.springframework.orm.hibernate4.HibernateTransactionManager.convertHibernateAccessException(HibernateTransactionManager.java:680)
at org.springframework.orm.hibernate4.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:562)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:754)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723)
at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:393)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:120)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:90)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:621)
at com.digiwin.newb2.test.ProgramSingle02TestService$$EnhancerByCGLIB$$8eea6179.doInsert(<generated>)
at com.digiwin.newb2.patterns.SysSingle01Controller.saveActionCore(SysSingle01Controller.java:486)
at com.digiwin.newb2.patterns.SysSingle02Controller.saveActionCore(SysSingle02Controller.java:870)
at com.digiwin.newb2.patterns.SysSingle01Controller.saveAction(SysSingle01Controller.java:410)