AOP简单实例

更新时间:2023-07-14 07:19:52 阅读: 评论:0

AOP简单实例
1、⾃定义注解
@Target(value = {ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyAnnotation {
}
2、切⾯类
@Aspect
@Component
public class MyAnnotationAspect {
/
**
* 定义切点,拦截的位置,可避免下⾯重复声明变量
*/
宛如近义词
@Pointcut("@annotation(annotation.MyAnnotation)")
private void pointCut(){}
//    @Before("@annotation(myAnnotation)")
//    public void doBefore(JoinPoint joinPoint, MyAnnotation myAnnotation){
//
//    }
@Before("pointCut()")
public void doBefore(JoinPoint joinPoint){
System.out.println("-----切⼊点的相关信息-----");
//⽬标⽅法的传⼊参数
Object[] args = Args();
System.out.println("共"+args.length+"个参数");
for (int i = 0; i < args.length; i++) {
System.out.println("第"+i+1+"个参数为:"+args[i]);
}
//获取⽬标⽅法信息
Signature signature = Signature();
System.out.println("⽬标⽅法名为:"+Name());
System.out.println("⽬标⽅法信息:"+signature);
/
/可获取所属类,然后获取所属类的相关信息
System.out.println("⽬标⽅法所属类名:"+DeclaringTypeName());
System.out.println("⽬标⽅法所属类简单类名:"+DeclaringType().getSimpleName());
System.out.println("----切⼊点相关信息----");
System.out.println("");
ieee论文
惜别System.out.println("step0(Before)-⽬标⽅法"+Name()+"执⾏前的操作。。。。");
}
入团志愿书怎么写
@AfterReturning("pointCut()")
public void doAfterReturning(JoinPoint joinPoint){
Signature signature = Signature();
System.out.println("step2(AfterReturning)-⽬标⽅法"+Name()+"返回值后的操作。。。。");    }
@After("pointCut()")
public void doAfter(JoinPoint joinPoint){
Signature signature = Signature();
System.out.println("step3(After)-⽬标⽅法"+Name()+"执⾏后的操作。。。。");
System.out.println("step3(After)-⽬标⽅法"+Name()+"执⾏后的操作。。。。");    }
@Around("pointCut()")
public Object doAround(ProceedingJoinPoint joinPoint){
System.out.println("---以下内容会在Before之前执⾏---");
Object[] args = Args();
System.out.println("共"+args.length+"个参数");
for (int i = 0; i < args.length; i++) {
System.out.println("第"+(i+1)+"个参数的旧值为:"+args[i]);
}
//改变参数值
args[0]="New Hello";
System.out.println("参数新值:"+args[0]);
System.out.println("---以上内容会在Before之前执⾏---");
System.out.println();
//执⾏⽬标⽅法十月革命的意义
Object result=null;
try {
result=joinPoint.proceed(args);
金匮肾气丸副作用} catch (Throwable throwable) {
System.out.println("执⾏⽬标⽅法异常。");
}
System.out.println();
System.out.println("---以下内容会在After之后执⾏---");
if(result instanceof String){
//改变返回值
result="Happy New Year";
System.out.println("增强后的返回值"+result);
}
System.out.println("---以上内容会在After之后执⾏---");
return result;
}
}
3、服务类
@Service
蒜泥茄子怎么做@Slf4j
public class MyAnnotationService {
@MyAnnotation
public String helloAop(String param){
System.out.println("step1-⽅法helloAop执⾏开始。。。。");
return param;
}
}
4、接⼝类
@RestController
@RequestMapping("/yjz")
public class MyController {
@Autowired
private MyAnnotationService myAnnotationService;
@PostMapping("/testHelloAop")
public JSONObject testHelloAop(@RequestParam String param){
String result=myAnnotationService.helloAop(param);
return JSONObject.parObject("{\"message\":\"SUCCESS\",\"code\":200,\"result\":\"" +result+                "\"}");
}
}
海参种类
5、测试结果
---以下内容会在Before之前执⾏---
共1个参数
第1个参数的旧值为:hello
参数新值:New Hello
---以上内容会在Before之前执⾏---
-----切⼊点的相关信息-----
共1个参数
第01个参数为:New Hello
⽬标⽅法名为:helloAop
⽬标⽅法信息:String com.yjz.first.rvice.MyAnnotationService.helloAop(String)
⽬标⽅法所属类名:com.yjz.first.rvice.MyAnnotationService
⽬标⽅法所属类简单类名:MyAnnotationService
-
---切⼊点相关信息----
step0(Before)-⽬标⽅法helloAop执⾏前的操作。。。。
step1-⽅法helloAop执⾏开始。。。。
step2(AfterReturning)-⽬标⽅法helloAop返回值后的操作。。。。
step3(After)-⽬标⽅法helloAop执⾏后的操作。。。。
---以下内容会在After之后执⾏---
增强后的返回值Happy New Year
---以上内容会在After之后执⾏---

本文发布于:2023-07-14 07:19:52,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1095712.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

下一篇:FY说明书
标签:返回值   相关   参数
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图