spring aop 怎样拿到方法返回的对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring aop 怎样拿到方法返回的对象相关的知识,希望对你有一定的参考价值。

参考技术A private void beforeTransationHandle(JoinPoint point) throws Exception
//拦截的实体类
Object target = point.getTarget();
//拦截的方法名称
String methodName = point.getSignature().getName();
//拦截的方法参数
Object[] args = point.getArgs();
//拦截的放参数类型
Class[] parameterTypes = ((MethodSignature)point.getSignature()).getMethod().getParameterTypes();

Method m = null;
try
//通过反射获得拦截的method
m = target.getClass().getMethod(methodName, parameterTypes);
//如果是桥则要获得实际拦截的method
if(m.isBridge())
for(int i = 0; i < args.length; i++)
//获得泛型类型
Class genClazz = GenericsUtils.getSuperClassGenricType(target.getClass());
//根据实际参数类型替换parameterType中的类型
if(args[i].getClass().isAssignableFrom(genClazz))
parameterTypes[i] = genClazz;


//获得parameterType参数类型的方法
m = target.getClass().getMethod(methodName, parameterTypes);

catch (SecurityException e)
e.printStackTrace();
catch (NoSuchMethodException e)
e.printStackTrace();

本回答被提问者采纳

springboot动态添加aop切面

参考技术A 需求:在不停止服务的情况下,通过上传一个jar包然后捕获某方法的异常进行处理

思路:

使用springaop实现

至于为什么要定义一个切入点到service包下面的所以方法,感兴趣的可以研究一下springAop的源码,里面有个postProcessBeforeInstantiation方法,会返回代理对象,如果没有则不会返回代理对象。
当然还有一种思路,就是在动态添加切入点的时候把spring容器中的对象替换成自己的代理对象(没有实验过,在非单例模式的时候有问题,这里不深入研究)。

引入aop的starter:

第一步:

第二步:

jar包怎么写?只需要实现对应的切面方法就行了

通常有方法前拦截,方法后拦截,以及异常拦截。通过在这些拦截中编写自己的业务处理,可以达到特定的需求。

execution表达式

20200401:添加注入applicationContext到jar里面

https://github.com/cdInit/aopHotPlugin

以上是关于spring aop 怎样拿到方法返回的对象的主要内容,如果未能解决你的问题,请参考以下文章

Spring AOP

Spring AOP:Exception encountered during context initialization - cancelling refresh attempt: org.spr

java中aop模式是怎样将切面织入业务方法中的?

Spring AOP获取拦截方法的参数名称跟参数值

深入理解Spring AOP之二代理对象生成

Spring技术内幕:Spring AOP的实现原理