首页 > 编程知识 正文

java aop应用场景,aop详解

时间:2023-05-04 11:34:25 阅读:112917 作者:663

今天整理了项目中使用的价格APP的相关点。 今天花时间提取,向大家学习。 代码是我脱敏后的。 为了安全,为了我的将来,我只能这样做。 大家学习一下那个的技术点就可以了

实例1接口的防重量在互联网上是前后端分开的,那么后端提供的api如何防重量?

原理:首先利用分布式锁,利用redis的key的实效性,

如果无法获取该密钥,则证明key仍然有效且无法访问,直接抛出异常,如果key不存在,则成功获取密钥,并采取相应的方法

@ around (“@ annotation (com.wfg.AOP.preventduplicaterequest )”) publicobjectdoaround ) proceedingjoinpointjointjoaterequequest 方法方法=signature.get method (; preventduplicaterequestannotation=method.get annotation (preventduplicaterequest.class ); String key=annotation.key (; 未设置if(stringutils.isblank(key ) ) key时Object[] args=joinPoint.getArgs ); key=generatekey(annotation,target,signature,args ); }if(stringutils.isblank(key ) ) { return joinPoint.proceed; } longttlinms=annotation.duration (; //锁定布尔锁定=false; /* try { //解锁密钥锁定=preventduplicatelock.acquire (prefix key,ttlInMs ); if (已锁定) { return joinPoint.proceed; } else { thrownewduplicatedrequestexception (; } } finally { //解锁密钥和解锁时间设置//解锁if (锁定) preventduplicatelock.release ) prefix密钥; } } * /返回空值; 注意)但是在项目中使用并不是那么容易。 代码只是代码片段,不能执行。 只是提供一种学习的想法

@target(elementtype.method ) retention ) retention policy.runtime documented public @ interfacepreventduplicaterequicater /** * key表达式* @return */String keyexpr () default ' ); /**防重量时间,一定时间内持有指定key的锁,单位ms毫秒*默认值5000 ms */long duration () default 5000; /**是否使用集中锁定(redis实现),默认为true; 否则,可以使用并发Map轻松实现。 也就是说,独立的本地反权重* @return */boolean distributed () default true; }介入监控系统的互联网公司对监控系统要求比较高,基本上监控所有方法,出现问题容易排除,原理相同

原理:

1 .接点定义、控制器、服务层所有方法的介入、评论定制等方法

2 .使用环绕声通知Around在方法调用前访问监视系统和方法调用以完成监视系统

其他类似的功能可以使用此方案实现

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。