java spring boot 自定义 aop
2023-12-29 16:42:35
以一个锁的加锁和释放为例
1、先定义注解
/**
* 锁切面
* @author fmj
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface VersionLockAOP {
}
2、然后定义切面类以及切点
/**
* 切面
*/
@Component
@Aspect
@Slf4j
public class VersionLockAOPAspect {
/**
* 之前
* @param joinPoint
*/
@Before(value = "@annotation(com.gscloud.modules.pos.upgrade.aop.VersionLockAOP)")
public void VersionLockAOPBeforePoint(JoinPoint joinPoint) {
try {
switch (joinPoint.getSignature().getName()) {
case "saveVersion":
if (!SingleUtil.SINGLE.getReentrantLockSaveVersion().tryLock(2000L, TimeUnit.MILLISECONDS)) {
throw new RuntimeException("saveVersion获取锁失败");
}
return;
case "saveVersionHistory":
if (!SingleUtil.SINGLE.getReentrantLockSaveUpgrade().tryLock(2000L, TimeUnit.MILLISECONDS)) {
throw new RuntimeException("saveVersionHistory获取锁失败");
}
return;
}
} catch (InterruptedException e) {
throw new RuntimeException("获取锁:" + e.getMessage());
}
}
/**
* 之后
* @param joinPoint
*/
@After(value = "@annotation(com.gscloud.modules.pos.upgrade.aop.VersionLockAOP)")
public void VersionLockAOPAfterPoint(JoinPoint joinPoint) {
switch (joinPoint.getSignature().getName()) {
case "saveVersion":
if (SingleUtil.SINGLE.getReentrantLockSaveVersion().isLocked()) {
SingleUtil.SINGLE.getReentrantLockSaveVersion().unlock();
}
return;
case "saveVersionHistory":
if(SingleUtil.SINGLE.getReentrantLockSaveUpgrade().isLocked()){
SingleUtil.SINGLE.getReentrantLockSaveUpgrade().unlock();
}
return;
}
}
}
3、在对应的方法上使用
执行该方法前后都会进入切点方法执行对应逻辑
文章来源:https://blog.csdn.net/qq_40934195/article/details/135290464
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!