热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

利用注解在Spring框架中实现面向切面编程(AOP)

本文探讨了如何在Spring框架中通过注解实现面向切面编程(AOP)。具体介绍了使用`@Retention(RetentionPolicy.RUNTIME)`和`@Target({ElementType.TYPE,ElementType.METHOD})`等注解来定义切面,以及如何配置SpringAOP以实现对业务逻辑的增强和解耦。通过实例代码,详细展示了注解驱动的AOP在实际项目中的应用,为开发者提供了实用的参考。

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

1、定义注解

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface RetryMethod {int retryCnt() default 1;int retryUnit() default 1000;}

2、切面

@Aspect
@Component
@Log4j
public class AopIntercepter {private Logger logger = LoggerFactory.getLogger(this.getClass());@Around("@annotation(com.youzan.test.util.aop.RetryMethod)")public void around(ProceedingJoinPoint joinPoint) throws Throwable{Method currentMethod = this.getCurrentMethod(joinPoint);String mName = currentMethod.getName();Object result = null;RetryMethod retry = currentMethod.getAnnotation(RetryMethod.class);boolean flag = false;int retryCount = retry.retryCnt();while (!flag&&retryCount>0){flag = true;try {logger.info("方法名: "+mName+"开始执行");System.out.println("方法名: "+mName+"开始执行");result = joinPoint.proceed();}catch (Throwable e){flag = false;retryCount -- ;Thread.sleep(retry.retryUnit());logger.info("方法名: "+mName+"重试第"+(retry.retryCnt()-retryCount)+"次");if(retryCount == 0){throw e;}}}}private Method getCurrentMethod(ProceedingJoinPoint joinPoint) {MethodSignature msig = (MethodSignature)joinPoint.getSignature();try {return joinPoint.getTarget().getClass().getMethod(msig.getName(), msig.getParameterTypes());} catch (NoSuchMethodException var4) {throw new RuntimeException("这就不该有问题");}}}

3、使用

@Component
public class AopTestCase {private int i &#61; 0;&#64;RetryMethod(retryCnt&#61;2,retryUnit &#61; 1050)public void test(){Long sum &#61; 5l;System.out.println("hello,i&#61;"&#43;i);i&#43;&#43;;Assert.assertTrue(sum<0,"大于0");System.out.println("after test");}public void testMethod(){System.out.println("test test");}
}


转:https://my.oschina.net/ouyangtaohong/blog/1577758



推荐阅读
author-avatar
若雄建伦95
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有