1. 程式人生 > >自定義註解、lock、aop實現註解鎖

自定義註解、lock、aop實現註解鎖

1、自定義的鎖註解

@Target({ElementType.PARAMETER, ElementType.METHOD})    
@Retention(RetentionPolicy.RUNTIME)    
@Documented    
public  @interface Servicelock { 
     String description()  default "";
}

2、aop切面

@Component
@Scope
@Aspect
@Order(1)
//order越小越是最先執行,但更重要的是最先執行的最後結束。order預設值是2147483647
public class LockAspect {
    /**
     * 思考:為什麼不用synchronized
     * service 預設是單例的,併發下lock只有一個例項
     */
    private static  Lock lock = new ReentrantLock(true);//互斥鎖 引數預設false,不公平鎖  
    
    //Service層切點     用於記錄錯誤日誌
    @Pointcut("@annotation(com.itstyle.seckill.common.aop.Servicelock)")  
    public void lockAspect() {
        
    }
    
    @Around("lockAspect()")
    public  Object around(ProceedingJoinPoint joinPoint) { 
        lock.lock();
        Object obj = null;
        try {
            obj = joinPoint.proceed();
        } catch (Throwable e) {
            e.printStackTrace();
            throw new RuntimeException();       
        } finally{
            lock.unlock();
        }
        return obj;
    } 
}


3、使用:
在需要新增同步方法上使用註解即可