自定義註解、lock、aop實現註解鎖
阿新 • • 發佈:2018-12-21
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、使用:
在需要新增同步方法上使用註解即可