包结构:

Spring.xml

UserDao.java

测试类Main方法

LogAspect.java

测试结果:

@AfterReturning标签属性分析:

value值: 可以写Aop的表达式,如execution、args、within等,多个之间使用&& || !作为连接; 也可以使用引用其他Pointcut;

pointcut值:和value值用法一样

returning值:给被增强方法返回值取个名字,给后面引用;

argNames值:方法入参的名字,Spring4.2.x测试时候发现写不写都可以实现Aop,具体看下面测试.

如果只需要记录方法返回值的话,只需要配置returning属性,方法入参配置上对应返回值类型或其父类即可,写Object应该肯定没问题吧;

知识点1.returning属性的值和增强方法的入参是按照名称来匹配;

当增强方法入参名称和returning不一致时,就会抛出异常Returning argument name 'val' was not bound in advice arguments

知识点2. 增强方法入参不能出现多余(JoinPoint不算多余),否则会匹配不上; 如果想要获取被增强方法入参,方式有两种,下面有介绍.

知识点3. 增强方法入参类型必须是 被增强方法返回值类型或者父类,否则增强方法无法执行; void类型的方法返回值是null,可以使用Object类型来接收

知识点3查看源码可以得到解释, AspectJAfterReturningAdvice的afterReturning会先判断类型是否匹配来决定执行不执行后置增强;

知识点4. 看到博文下在讨论能否改变方法返回值类型,下面讨论给出了答案:

String类型的无法改变返回值类型,而对象类型的可以调用set方法将返回值属性改变;

讨论地址:https://blog.csdn.net/owen_william/article/details/50812771#commentsedit

测试如下:

ResultStr.java

UserDao.java

增强类和测试方法

知识点5.获取被增强方法入参的几种方式:

方式一.使用JoinPoint获取入参

方式二. 注解添加写argNames属性值

分析: 被增强方法addUser我们用A来简称,增强方法getReturning用B来简称, A的入参和B的args()内参数按照顺序来对应;  args()内参数+returning值  与argnames中参数按照名称来对应,  而argNames的值与B入参按照顺序来对应,这点从下面名称不匹配可以证实;

注意:argNames中一定要写returning的值

方式三.注解不写argNames属性值

分析:不写argNames属性值时候,  addUser仍然简称A方法,getReturning方法简称B方法, A方法的入参和B方法的args()括号内参数按照顺序对应, args()括号内参数和B方法入参按照名称对应就可以实现后置增强得到入参了.

Spring Aop AfterReturning接收返回值的更多相关文章

  1. spring aop影响dubbo返回值问题解决

    问题描述: dubbo服务已经注册,客户端调用提供者服务返回值为空.(考虑动态代理.aop的返回值影响,dubbo基于spring2.5.6.SEC03,本次开发使用的是spring4.3.8) 解决 ...

  2. phoenixframe平台连接socketserver,并接收返回值的演示样例

    package org.phoenix.cases.webservice; import java.util.LinkedList; import org.phoenix.action.WebElem ...

  3. spring boot 规范json返回值

    spring boot 规范json返回值 spring boot 接口返回配置 @ResponseBody ,则返回自定义的对象,解析成json. 但是,部分字段能友好的展示出来.如 Date,Lo ...

  4. WebRequest发送请求并接收返回值

    public string getXmlStr(string hphmcode)         {            string Url = "http://localhost:80 ...

  5. Spring MVC的方法返回值和参数传递

    1. SpringMVC方法的返回值类型 3.1String类作为返回值 3.1.1Controller层 /** * 返回值类型为String时,一般用于返回视图名称 * 1.当方法返回值为null ...

  6. python入门(14)定义函数和接收返回值

    定义函数: 定义一个求绝对值的my_abs函数为例: def my_abs(x): if x >= 0: return x else: return -x 如果没有return语句,函数执行完毕 ...

  7. CXF2.7整合spring发布webservice,返回值类型是Map和List<Map>类型

    在昨天研究了发布CXF发布webservice之后想着将以前的项目发布webservice接口,可是怎么也发布不起来,服务启动失败,原来是自己的接口有返回值类型是Map. 研究了一番之后,发现: we ...

  8. Spring MVC--------处理方法返回值的可选类型

    对于Spring MVC处理方法支持支持一系列的返回方式:  (1)ModelAndView (2)Model (3)ModelMap (4)Map (5)View (6)String (7)Void ...

  9. 关于form表单提交数据后不跳转页面+ajax接收返回值的处理

    1.前台的form表单建立,注意action.enctype的内容, 2.通过添加一个隐藏的iframe标签使form的target指向iframe来达到不跳转页面的效果,同时需要在js里获取ifra ...

随机推荐

  1. 没那么难,谈CSS的设计模式

    没那么难,谈CSS的设计模式 来源: 灵感的小窝  发布时间: 2016-09-09 16:46  阅读: 8949 次  推荐: 27   原文链接   [收藏]   什么是设计模式? 曾有人调侃, ...

  2. MacOS卸载Jenkins安装包

    /Library/Application\ Support/Jenkins/Uninstall.command

  3. 【BZOJ3193】 [JLOI2013]地形生成

    BZOJ3193 [JLOI2013]地形生成 Solution 第一问不是很简单吗? 直接计数就好了. 第二问思考无果看了看hyj神仙的代码,发现可以dp求解. 具体可以看代码(其实主要是我说不清楚 ...

  4. AJPFX平台:外汇的基本面分析

    AJPFX平台:开设外汇保证金交易账户以及入金之后,通常就可以开始交易了,但是在选择买卖时点时通常会依据两种分析,两种主要分析方法通常会被称为基本面分析和技术分析.基本面分析注重金融,经济理论和政局发 ...

  5. JQuery Mobile - 导航栏选中状态代码

    class="ui-btn-active" 参考: https://wizardforcel.gitbooks.io/w3school-jqmobile/content/8.htm ...

  6. Python中super()的用法

    参考链接:https://www.cnblogs.com/shengulong/p/7892266.html super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是 ...

  7. Linux系统文件与目录管理(1)

    文件与目录的操作 在Linux系统的文件与目录的管理上,不外乎『显示属性』.『拷贝』.『删除文件』.『移动文件或目录』.『重命名』等常用操作,由于文件与目录的管理在 Linux当中是很重要的,尤其是每 ...

  8. LOJ#3093. 「BJOI2019」光线(递推+概率期望)

    题面 传送门 题解 把\(a_i\)和\(b_i\)都变成小数的形式,记\(f_i\)表示\(1\)单位的光打到第\(i\)个玻璃上,能从第\(n\)个玻璃下面出来的光有多少,记\(g_i\)表示能从 ...

  9. Codeforces Round #425 (Div. 2) B. Petya and Exam(字符串模拟 水)

    题目链接:http://codeforces.com/contest/832/problem/B B. Petya and Exam time limit per test 2 seconds mem ...

  10. cas未能够识别出目标 ***;票根

    使用cas做单点登录,在验证ticket的时候,报下面的错误: <cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'> & ...