Spring Aop 实现函数内部增强
来源:互联网 发布:金银绣花线js 编辑:程序博客网 时间:2024/06/15 03:02
Spring Aop 的一个切面包括 1.增强类型(函数调用前、后,抛出异常和函数调用前后) 2.增强的业务逻辑 3.连接点
而Spring Aop 只支持方法的连接点,当我想在方法内部织入增强时,可以有两种方式:
1.比如一个函数A有a,b,c三种功能,我想在b前也即函数中间织入一个增强,那么可以把b单独拿出来写成一个独立的函数,然后在A中调用b,这样就可以b前、后织入切面了。
2.一般函数只有一种功能,难以进行拆分。例如在函数中间有一个变量a,现在我想在这个变量后织入增强,同时把该变量传递过去,那么我可以在该类中定义一个空函数(什么也不做)作为目标函数,然后把变量a赋给该函数的形参,再在该函数织入切面,那么这个切面可以获得目标函数传入的参数即a。主函数调用这个空函数即可。
例如在我的函数中,我想把变量getCount与sumCount传递给切面进行处理(假设切面的功能就是打印变量)
public void run() {while (true) {Query query = session.createQuery("from VehicleInfo");query.setFirstResult(getCount * getNumOneTime);query.setMaxResults(getNumOneTime);List<VehicleInfo> infoList = query.list();getCount++;sumCount += infoList.size();//在这儿织入切面,并将变量传递给切面}}我可以定义一个空函数,什么也不做
public void transferToWeb(int getCount,int sumCount) {}
然后再这个函数前或者后织入切面,再在run函数中调用这个空函数
getCount++;sumCount += infoList.size();transferToWeb(getCount,sumCount);
但是需要注意的是Aop是需要代理的,只有当代理类直接调用transferToWeb增强才会织入,而通过run函数间接调用transferToWeb,因为代理是不会传递的,所以增强还是不会织入,所以这儿必须强制获得该类的代理,例如我这是的类名字叫做Convert,那么将代码改成
sumCount += infoList.size();//获取代理((Convert)AopContext.currentProxy()).transferToWeb(getCount,sumCount);增强即可织入。
- Spring Aop 实现函数内部增强
- 初探spring aop内部实现
- Spring AOP(1)- 前置增强 实现
- Spring AOP(2)- 后置增强 实现
- Spring-AOP 通过配置文件实现 前置增强
- Spring-AOP 通过配置文件实现 后置增强
- Spring-AOP 通过配置文件实现 环绕增强
- Spring AOP 增强类型
- Spring AOP--引入增强
- Spring AOP增强类型
- Spring Aop增强
- spring aop 增强
- Spring AOP 增强类型
- Spring AOP的实现原理之获取增强器Adivors
- spring中的Cglib字节码增强实现AOP
- Spring-AOP 通过配置文件实现 异常抛出增强
- Spring-AOP 通过配置文件实现 引介增强
- Spring Aop 目标对象内部的自我调用无法实施切面的增强处理原因
- Mac OS X Terminal speed open
- C++学习过程 4
- 编写存储过程时,出现“转换成数据类型 int 时失败”错误的解决方法
- 浅谈cursor
- 分拆数 && hdu 4651 && hdu 4658
- Spring Aop 实现函数内部增强
- UVA 494—— Kindergarten Counting Game
- Delphi我写的关于验证邮箱格式的程序
- 大数据介绍
- OMAPL学习网站 .
- Why Does GoldenGate Report The Lag Is Unknown
- 文件复制(多进程实现-适合各种项目参考)
- hdu 4452 Running Rabbits(模拟水题)
- Google_android_JNI使用方法