直接注解通知顺序不一样,?好像是前置,最终,返回,不是很明白。使用环绕通知自己定义通知顺序,不想探究了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
| package com.itheima.utils;
import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component;
@Component("txManger") @Aspect public class TransactionManager { @Autowired private ConnectionUtils connectionUtils; @Pointcut("execution(* com.itheima.service.impl.*.*(..) )") private void pt1(){
}
@Around("pt1()") public Object aroundAdvice(ProceedingJoinPoint pjp){ Object trValue=null; try { Object[] args = pjp.getArgs(); this.beginTransaction();
trValue= pjp.proceed(args); this.commit(); return trValue; } catch (Throwable e){ this.rollback(); throw new RuntimeException(e); }finally { this.release(); } }
public void beginTransaction(){ try { connectionUtils.getThreadConnection().setAutoCommit(false); }catch (Exception e){ e.printStackTrace(); } }
public void commit(){ try { connectionUtils.getThreadConnection().commit(); }catch (Exception e){ e.printStackTrace(); } }
public void rollback(){ try { connectionUtils.getThreadConnection().rollback(); }catch (Exception e){ e.printStackTrace(); } }
public void release(){ try { connectionUtils.getThreadConnection().close(); connectionUtils.removeConnection(); }catch (Exception e){ e.printStackTrace(); } } }
|