Spring AOP 前切入点及多参数问题-不错的理解多参问题!.docxVIP

Spring AOP 前切入点及多参数问题-不错的理解多参问题!.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Spring AOP 前切入点及多参数问题-不错的理解多参问题!

Spring AOP 前切入点及多参数问题博客分类:?/category/256839【AOP】/category/49112【Spring】/blogs/tag/aopaop/blogs/tag/springspring?问题:看了很多关于Spring AOP的文章,在讲各种切入方式(before、around、after-returnning、thrown等)时,被切入的业务主体Bean的方法,基本都是无参数的。?也有提到有参数的,但都是一个String型的参数。?以before为例,无参数方法的切点配置为?Xml代码?aop:before?method=before?pointcut=execution(*?cn.xxxx..*.*(..))/?如果方法有一个String型的参数param,则配置为?Xml代码?aop:before?method=before?arg-names=param?pointcut=execution(*?cn.xxxx..*.*(..))?and?args(param)/?注:如果参数其实可为任何类型,即Object。如果非要强调是String型,参数为其他类型的方法,不想被切点切入,则可写成 method=before(java.lang.String)?(经实际测试 arg-names=param 不写也可以)?但如果 cn.xxxx..*.* 的方法有多个参数,且个数不定,要想让切点可以切入,这么个写法就不行了。?我搜了N多的帖子,也没能找到方法,最终几经辗转,终于在网友的帮助下,点破了这一层窗户纸,其实也很简单,还是在配置的写法:?Xml代码?aop:before?method=before?pointcut=execution(*?cn.xxxx..*.*(..))?and?args(..)/?与之配合的切点的写法是?Java代码?public?void?before(JoinPoint?jp)?throws?Throwable?{??...??}??这样,不论业务Bean的方法有多少个参数,都可以被这个切点切入了。如果需要访问各个参数,只需?Java代码?Object[]?args?=?jp.getArgs();??----------------------------------华丽的分割线-----------------------------------?其实,能够满足如上需求的方法,至少还有一种,就是拦截器。?Mxl代码?bean?id=myService?class=org.springframework.aop.framework.ProxyFactoryBean??property?name=interceptorNames??list??valuebeforeInterceptor/value??/list??/property??property?name=target??ref?bean=realServiceTarget?/??/property?/bean??bean?id=realServiceTarget?class=cn.xxxx.xxx.Xxxx/?bean?id=beforeInterceptor?class=cn.xxxx.xxx.MyChecker/?思路是在注入ServiceBean时,偷梁换柱一下,用myService代替,实际是指向Spring的拦截器,它可以在执行真正的ServiceBean之前,先执行beforeInterceptor所指向的拦截代码?(这里是MyChecker,这个拦截器要实现ercept.MethodInterceptor接口,并完成public Object invoke(MethodInvocation invocation) throws Throwable方法)然后再交还给target属性指明的真正的ServiceBean。它不仅仅能够得到方法的参数,而且还有更强的功能——决定是否继续执行target。?Java代码?public?class?MyChecker?implements?MethodInterceptor?{????/**??*?用户访问认证方法。??*?如果登录合法则开始执行服务,否则返回错误。??*/??public?Object?invoke(MethodInvocation?invocation)?throws?Throwable?{???Method?invokeMethod?=?invocation.getMethod();???Object[]?args?=?invocation.getArguments();???...???if(....){???return?ceed

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档