JoinPoint的用法

JoinPoint 对象

JoinPoint对象封装了SpringAop中切面方法的信息,在切面方法中添加JoinPoint参数,就可以获取到封装了该方法信息的JoinPoint对象. 
常用api:

方法名功能
Signature getSignature();获取封装了署名信息的对象,在该对象中可以获取到目标方法名,所属类的Class等信息
Object[] getArgs();获取传入目标方法的参数对象
Object getTarget();获取被代理的对象
Object getThis();获取代理对象

ProceedingJoinPoint对象

ProceedingJoinPoint对象是JoinPoint的子接口,该对象只用在@Around的切面方法中, 
添加了 
Object proceed() throws Throwable //执行目标方法 
Object proceed(Object[] var1) throws Throwable //传入的新的参数去执行目标方法 
两个方法.

Demo

切面类

@Aspect
@Component
public class aopAspect {/*** 定义一个切入点表达式,用来确定哪些类需要代理* execution(* aopdemo.*.*(..))代表aopdemo包下所有类的所有方法都会被代理*/@Pointcut("execution(* aopdemo.*.*(..))")public void declareJoinPointerExpression() {}/*** 前置方法,在目标方法执行前执行* @param joinPoint 封装了代理方法信息的对象,若用不到则可以忽略不写*/@Before("declareJoinPointerExpression()")public void beforeMethod(JoinPoint joinPoint){System.out.println("目标方法名为:" + joinPoint.getSignature().getName());System.out.println("目标方法所属类的简单类名:" +        joinPoint.getSignature().getDeclaringType().getSimpleName());System.out.println("目标方法所属类的类名:" + joinPoint.getSignature().getDeclaringTypeName());System.out.println("目标方法声明类型:" + Modifier.toString(joinPoint.getSignature().getModifiers()));//获取传入目标方法的参数Object[] args = joinPoint.getArgs();for (int i = 0; i < args.length; i++) {System.out.println("第" + (i+1) + "个参数为:" + args[i]);}System.out.println("被代理的对象:" + joinPoint.getTarget());System.out.println("代理对象自己:" + joinPoint.getThis());}/*** 环绕方法,可自定义目标方法执行的时机* @param pjd JoinPoint的子接口,添加了*            Object proceed() throws Throwable 执行目标方法*            Object proceed(Object[] var1) throws Throwable 传入的新的参数去执行目标方法*            两个方法* @return 此方法需要返回值,返回值视为目标方法的返回值*/@Around("declareJoinPointerExpression()")public Object aroundMethod(ProceedingJoinPoint pjd){Object result = null;try {//前置通知System.out.println("目标方法执行前...");//执行目标方法//result = pjd.proeed();//用新的参数值执行目标方法result = pjd.proceed(new Object[]{"newSpring","newAop"});//返回通知System.out.println("目标方法返回结果后...");} catch (Throwable e) {//异常通知System.out.println("执行目标方法异常后...");throw new RuntimeException(e);}//后置通知System.out.println("目标方法执行后...");return result;}
}

被代理类

/*** 被代理对象*/
@Component
public class TargetClass {/*** 拼接两个字符串*/public String joint(String str1, String str2) {return str1 + "+" + str2;}
}

测试类

public class TestAop {@Testpublic void testAOP() {//1、创建Spring的IOC的容器ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:bean.xml");//2、从IOC容器中获取bean的实例TargetClass targetClass = (TargetClass) ctx.getBean("targetClass");//3、使用beanString result = targetClass.joint("spring","aop");System.out.println("result:" + result);}
}

输出结果

目标方法执行前...
目标方法名为:joint
目标方法所属类的简单类名:TargetClass
目标方法所属类的类名:aopdemo.TargetClass
目标方法声明类型:public
第1个参数为:newSpring
第2个参数为:newAop
被代理的对象:aopdemo.TargetClass@4efc180e
代理对象自己:aopdemo.TargetClass@4efc180e
目标方法返回结果后...
目标方法执行后...
result:newSpring+newAop

参考文章: 
http://blog.csdn.net/ochangwen/article/details/52557724 
http://blog.csdn.net/a9529lty/article/details/7031070

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/451222.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决 No projects are available for deployment to this server!

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 如题&#xff0c;今天在尝试部署从SVN上down下来的项目时&#xff0c;发现不能被tomcat识别成web项目&#xff01;原因是SVN上down下来的…

地大信工成果快报

在成果快报投稿中&#xff0c;请注意以下几个问题&#xff1a;&#xff08;1&#xff09;成果信息一定要准确、全面&#xff0c;所有作者必须都要列出来&#xff0c;而不要出现et al. 这样的表述&#xff0c;通讯作者一定要用*号标注&#xff1b;&#xff08;2&#xff09;成果…

javaBean的命名规则

前段时间&#xff0c;写程序时&#xff0c;出了错误&#xff0c;竟然没有想到是自己属性命名的问题&#xff0c;哎~~~真是一定要注意规范呀&#xff0c;在这里我从网上找了些&#xff0c;规范作为参考 Sun 推荐的命名规范 1 &#xff0c;类名要首字母大写&#xff0c;后面的单词…

volatile的应用

volatile&#xff0c;中文意思是不稳定的、反复无常的&#xff0c;用来修饰变量&#xff0c;和多线程、并发有关系。 Java代码在编译后会变成Java字节码&#xff0c;字节码被类加载器加载到JVM里&#xff0c;JVM执行字节码&#xff0c;最终需要转化为汇编指令在CPU上执行。 在多…

漫谈国内智能手机市场现状

本文纯属一时兴起&#xff0c;想到哪儿写到哪儿&#xff0c;本人文笔也不咋地&#xff0c;写的也比较随意&#xff0c;如有错误欢迎指正&#xff0c;有啥意见欢迎交流。原创文章&#xff0c;转载注明emouse的技术专栏。 我是一个不折不扣的数码爱好者&#xff0c;对电脑手机这些…

【刷题】BZOJ 4195 [Noi2015]程序自动分析

Description 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足。 考虑一个约束满足问题的简化版本&#xff1a;假设x1,x2,x3,…代表程序中出现的变量&#xff0c;给定n个形如xixj或xi≠xj的变量相等/不等的约束条件&#xff0c;请判定是否可以分别为每一个…

mysql 5.5 安装配置方法图文教程

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 回忆一下mysql 5.5 安装配置方法&#xff0c;整理mysql 5.5 安装配置教程笔记&#xff0c;分享给大家。 MySQL下载地址&#xff1a;htt…

git解除与远程分支的关联

在工作中&#xff0c;经常需要将同一份代码传到不同的git仓库中去 如果本地同样一份代码&#xff0c;已经关联了一个与远程分支&#xff0c;那么怎么才能解除原程分支&#xff0c;并关联到一个新的分支将代码提交到新的分支上去呢&#xff1f; 1、如果你已经在远程创建了一个分…

FindWindow用法

函数功能&#xff1a;该函数获得一个顶层窗口的句柄&#xff0c;该窗口的类名和窗口名与给定的字符串相匹配。这个函数不查找子窗口。在查找时不区分大小写。 函数型&#xff1a;HWND FindWindow&#xff08;LPCTSTR IpClassName&#xff0c;LPCTSTR IpWindowName&#xff0…

中国大城市政治地位综合实力排名

中国大城市政治地位综合实力排名&#xff01; 中国大城市政治地位综合实力排名&#xff01;政治地位: 政治地位: 1&#xff08;直辖市 4 个&#xff09;&#xff1a;上海、北京、天津、重庆 2&#xff08;副省级城市 15 个&#xff09;&#xff1a;广州、深圳、武汉、南京、沈阳…

sourcemap总结

sourcemap在线上压缩文件调试中很重要&#xff0c;在此总结如下&#xff1a; 1. 开启sourcemap (1). 浏览器要开启source-map支持(2). 压缩文件底部要有source-map的URL&#xff0c;压缩要开启source-map(3). .map文件要放在服务器&#xff0c;source-map URL指向的位置 2. sou…

navicat 导出的sql文件,再导入,运行SQL文件成功,数据库中却没有表

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 问题描述&#xff1a;本来在数据库上右键 &#xff0c;运行SQL文件 &#xff0c;就可以导入 sql ,建表成功&#xff0c;并且数据也该的…

mysql索引之二级索引学习总结

二级索引又称辅助索引、非聚集索引(no-clustered index)。b&#xff0b;tree树结构。然而二级索引的叶子节点不保存记录中的所有列&#xff0c;其叶子节点保存的是<健值&#xff0c;(记录)地址>。好似聚集索引中非叶子节点保存的信息&#xff0c;不同的是二级索引保存的是…

264,avs中Skip宏块与Direct预测模式 ,对称模式的区别

1. B_Skip类型宏块 &#xff1a;无像素残差&#xff0c;无运动矢量残差&#xff08;MVD&#xff09;和参考帧。解码时&#xff0c;通过Direct预测模式&#xff08;时间或空间&#xff09;计算出前、后向MV后&#xff0c;直接利用前、后向MV得到像素预测值。像 素重构值像…

【hdu 6444】Neko's loop

【链接】 我是链接,点我呀:) 【题意】 给你一个序列. 你可以选择起点i。 然后每次往右跳k次。 得到下一个值a[ik];。 问你跳m次能得到的最大值ma是多少。 如果>s输出0 否则输出s-ma; 【题解】 最后肯定会形成gcd(n,k)个环的。 对于每个环(长度为cnt。 预处理出从1..2cnt的…

高性能MySQL之Count统计查询

近一段时间&#xff0c;有同事问我 “MySQL执行count很慢&#xff0c;有没有什么优化的空间”。当时在忙&#xff0c;就回复了一句“innodb里面count统计都是实时统计&#xff0c;慢一些是正常的”&#xff0c; 周末闲暇下来&#xff0c;想到以前有好多人都问过关于count的问题…

js转换字符串为base64位

在window对象下有两个api,可以对ASCII编码进行编译,得到base64位的字符串 btoa:编码为base64atob:解码为ASCII码此种方法不能对中文进行操作,因为ASCII码中没有中文,如果编码会得到乱码 要编码中文可以先用encodeURIComponent() 对字符串进行转义,转义后再btoa()成base64就可以…

java 文件下载,中文表名,中文内容

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 RequestMapping("userDownloadTemplet")private void userDownloadTemplet(HttpServletRequest request,HttpServletResponse …

cherry-pick的用法

简述 git cherry-pick可以选择某一个分支中的一个或几个commit(s)来进行操作。例如&#xff0c;假设我们有个稳定版本的分支&#xff0c;叫v2.0&#xff0c;另外还有个开发版本的分支v3.0&#xff0c;我们不能直接把两个分支合并&#xff0c;这样会导致稳定版本混乱&#xff0c…

Docker 二进制安装docker

https://blog.csdn.net/bruce_yds/article/details/80035714转载于:https://www.cnblogs.com/Presley-lpc/p/9698724.html