TCC补偿切面核心代码实现


package org.mengyun.tcctransaction.spring;

import org.apache.log4j.Logger;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.mengyun.tcctransaction.interceptor.CompensableTransactionInterceptor;
import org.springframework.core.Ordered;

/**
 * TCC补偿切面(切面是通知和切点的结合).
 * 拦截带@Compensable注解的可补偿事务方法.
 * Created by changmingxie.
 */
@Aspect
public class TccCompensableAspect implements Ordered {
	
	static final Logger LOG = Logger.getLogger(TccCompensableAspect.class.getSimpleName());

	/**
	 * 通知顺序(默认:最高优先级).
	 * 在“进入”连接点的情况下,最高优先级的通知会先执行(所以给定的两个前置通知中,优先级高的那个会先执行)。 在“退出”连接点的情况下,最高优先级的通知会最后执行。
	 * 当定义在不同的切面里的两个通知都需要在一个相同的连接点中运行, 那么除非你指定,否则执行的顺序是未知的,你可以通过指定优先级来控制执行顺序。 
	 */
    private int order = Ordered.HIGHEST_PRECEDENCE; // 最高优先级(值较低的那个有更高的优先级)

    /**
     * 可补偿事务拦截器
     */
    private CompensableTransactionInterceptor compensableTransactionInterceptor;

    /**
     * 定义切入点(包含切入点表达式和切点签名,切点用于准确定位应该在什么地方应用切面的通知,切点可以被切面内的所有通知元素引用).
     */
    @Pointcut("@annotation(org.mengyun.tcctransaction.Compensable)")
    public void compensableService() {

    }

    /**
     * 定义环绕通知(在一个方法执行之前和执行之后运行,第一个参数必须是 ProceedingJoinPoint类型,pjp将包含切点拦截的方法的参数信息)
     * @param pjp
     * @throws Throwable
     */
    @Around("compensableService()")
    public Object interceptCompensableMethod(ProceedingJoinPoint pjp) throws Throwable {
    	LOG.debug("==>interceptCompensableMethod");
        return compensableTransactionInterceptor.interceptCompensableMethod(pjp);
    }

    @Override
    public int getOrder() {
        return order;
    }

    public void setOrder(int order) {
        this.order = order;
    }

    /**
     * 设置可补偿事务拦截器.
     * @param compensableTransactionInterceptor
     */
    public void setCompensableTransactionInterceptor(CompensableTransactionInterceptor compensableTransactionInterceptor) {
        this.compensableTransactionInterceptor = compensableTransactionInterceptor;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值