Aop 中 JoinPoint等对象的用法Api

@Aspect 定义类为切入类

@Pointcut 声明一个切入策略供 @Before @After @ Around @ AfterReturning选择

@Before 被切入方法执行前执行

@After 被切入方法执行后执行

@Around 被切入方法前后都可以加入一些逻辑

@AfterReturning 被切入方法返回时执行

JoinPoint 加入这个参数可以获取被切入方法的名称和参数

JoinPoint 对象

Signature getSignature();//获取封装了署名信息的对象,在该对象中可以获取到目标方法名,所属类的Class等信息 (修饰符+包名+类名+方法名)

Object[] getArgs();//获取传入目标方法的参数对象

Object getTarget();//获取传入目标方法的参数对象

Object getThis();//获取代理对象

getSignature().getName();//获取方法名

ProceedingJoinPoint对象

只用在@Around的切面方法中,是JoinPoint的子接口

Object proceed() throws Throwable //执行目标方法 
Object proceed(Object[] var1) throws Throwable //传入的新的参数去执行目标方法

Aspect类Demo

 1 @Aspect
 2 @Component
 3 public class aopAspect {
 4     /**
 5      * 定义一个切入点表达式,用来确定哪些类需要代理
 6      * execution(* aopdemo.*.*(..))代表aopdemo包下所有类的所有方法都会被代理
 7      */
 8     @Pointcut("execution(* aopdemo.*.*(..))")
 9     public void declareJoinPointerExpression() {}
10
11     /**
12      * 前置方法,在目标方法执行前执行
13      * @param joinPoint 封装了代理方法信息的对象,若用不到则可以忽略不写
14      */
15     @Before("declareJoinPointerExpression()")
16     public void beforeMethod(JoinPoint joinPoint){
17         System.out.println("目标方法名为:" + joinPoint.getSignature().getName());
18         System.out.println("目标方法所属类的简单类名:" +        joinPoint.getSignature().getDeclaringType().getSimpleName());
19         System.out.println("目标方法所属类的类名:" + joinPoint.getSignature().getDeclaringTypeName());
20         System.out.println("目标方法声明类型:" + Modifier.toString(joinPoint.getSignature().getModifiers()));
21         //获取传入目标方法的参数
22         Object[] args = joinPoint.getArgs();
23         for (int i = 0; i < args.length; i++) {
24             System.out.println("第" + (i+1) + "个参数为:" + args[i]);
25         }
26         System.out.println("被代理的对象:" + joinPoint.getTarget());
27         System.out.println("代理对象自己:" + joinPoint.getThis());
28     }
29
30     /**
31      * 环绕方法,可自定义目标方法执行的时机
32      * @param pjd JoinPoint的子接口,添加了
33      *            Object proceed() throws Throwable 执行目标方法
34      *            Object proceed(Object[] var1) throws Throwable 传入的新的参数去执行目标方法
35      *            两个方法
36      * @return 此方法需要返回值,返回值视为目标方法的返回值
37      */
38     @Around("declareJoinPointerExpression()")
39     public Object aroundMethod(ProceedingJoinPoint pjd){
40         Object result = null;
41
42         try {
43             //前置通知
44             System.out.println("目标方法执行前...");
45             //执行目标方法
46             //result = pjd.proeed();
47             //用新的参数值执行目标方法
48             result = pjd.proceed(new Object[]{"newSpring","newAop"});
49             //返回通知
50             System.out.println("目标方法返回结果后...");
51         } catch (Throwable e) {
52             //异常通知
53             System.out.println("执行目标方法异常后...");
54             throw new RuntimeException(e);
55         }
56         //后置通知
57         System.out.println("目标方法执行后...");
58
59         return result;
60     }
61 }

原文地址:https://www.cnblogs.com/Eeexiang/p/9270713.html

时间: 2024-10-21 06:32:54

Aop 中 JoinPoint等对象的用法Api的相关文章

spring aop中引介拦截器的用法

public class Other implements IntroductionInterceptor,IOther{ public void doOther(){ System.out.println("Other对象的功能"); } public Object invoke(MethodInvocation methodInvocation) throws Throwable { if(implementsInterface(methodInvocation.getMethod

IOS中复制对象的用法及深拷贝和浅拷贝详解

亲爱的网友,我这里有套课程想和大家分享,如果对这个课程有兴趣的,可以加我的QQ2059055336和我联系. 课程内容简介 我们软件是基于移动设备的.所以我们必然的选择了安卓作为我们的开发工具.课程中,我们将简要的介绍Android的基本概念,然后进行我们的实战开发.在开发中,大家讲学习到基本的组件,适配UI,数据的存储,多线程下载,开机广播,闹钟提醒,短信发送等实际项目开发中碰到的有用的知识点.通过课程学习,让大家能够掌握Android软件开发的流程,注意点,及优化.帮助大家迅速的掌握Andr

asp.net中利用session对象传递、共享数据[session用法]

下面介绍Asp.net中利用session对象传递.共享数据用法: 1.传递值: 首先定义将一个文本值或单独一个值赋予session,如下: session["name"]=textbox1.text:将文本1的值赋给了session变量name,当调查到其它页面时,此值可以传递,依然存在,下面是调用或判断此值. If(session["name"]==null) {} Else { lable1.text=session["name"].tos

【转】asp.net中利用session对象传递、共享数据[session用法]

来自:http://blog.unvs.cn/archives/session-transfer-method.html 下面介绍Asp.net中利用session对象传递.共享数据用法: 1.传递值: 首先定义将一个文本值或单独一个值赋予session,如下: session["name"]=textbox1.text:将文本1的值赋给了session变量name,当调查到其它页面时,此值可以传递,依然存在,下面是调用或判断此值. If(session["name"

webform中Session和Cookies对象的用法、登录保持

一 .webform中Session和Cookies对象的用法 1.Session: Session:在计算机中,尤其是在网络应用中,称为"会话控制".Session 对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序的 Web页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去.当用户请求来自应用程序的 Web 页时,如果该 用户还没有会话,则 Web 服务器将自动创建一个 Session 对象.当会话过期或被放弃后,服务器将终

ASP.NET中application对象的用法(面试题)

ASP.NET中application对象的用法 本文导读:Application对象是HttpApplicationState类的一个实例,Application状态是整个应用程序全局的.Application对象在服务器内存中存储数量较少又独立于用户请求的数据.由于它的访问速度非常快而且只要应用程序不停止,数据一直存在,我们通常在Application_Start的时候去初始化一些数据,在以后的访问中可以迅速访问和检索. 一.Application对象的理解 Application对象在实际

Spring AOP中的动态代理

0  前言 1  动态代理 1.1 JDK动态代理 1.2 CGLIB动态代理 1.2.1 CGLIB的代理用法 1.2.2 CGLIB的过滤功能 2  Spring AOP中的动态代理机制 2.1 JdkDynamicAopProxy 2.2 CglibAopProxy 3 总结 0  前言 前一个季度旅游TDC的Thames服务有几次宕机,根据组内原因认真查找发现是数据库事务造成的,后来把服务中的事务配置全部去掉,服务恢复正常.根据这次教训,虽然现在还是很难确定是哪一个方面的真正原因,但是激

SpringMVC中 -- @RequestMapping的作用及用法

一.@RequestMapping 简介 在Spring MVC 中使用 @RequestMapping 来映射请求,也就是通过它来指定控制器可以处理哪些URL请求,相当于Servlet中在web.xml中配置 <servlet> <servlet-name>servletName</servlet-name> <servlet-class>ServletClass</servlet-class> </servlet> <ser

aop中的名词解释

aop中的名词解释 aop spring Joinpoint(连接点) 目标对象中所有可以增强的方法叫做连接点 Pointcut(切入点) 目标对象中要增强的的方法 Advice(通知/增强) 增强的代码 Target(目标对象) 被代理对象 Weaving(织入) 将通知应用到连接点的过程 Proxy(代理) 生成的代理对象 Aspect(切面) 切入点+通知就形成了切面