博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用CGLib实现动态代理实现Spring的AOP
阅读量:4599 次
发布时间:2019-06-09

本文共 1453 字,大约阅读时间需要 4 分钟。

当我们用Proxy 实现Spring的AOP的时候, 我们的代理类必须实现了委托类的接口才能实现。 而如果代理类没有实现委托类的接口怎么办? 那么我们就可以通过CGLib来实现

 

package cn.gbx.aop; import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy; import cn.gbx.service.impl.PersonService; public class ProxyFactory implements InvocationHandler{    private Object targetObject;         public Object createProxyInstance(Object targetObject) {        this.targetObject = targetObject;        return Proxy.newProxyInstance(this.targetObject.getClass().getClassLoader(),                this.targetObject.getClass().getInterfaces(),                 this);    }     @Override    public Object invoke(Object proxy, Method method, Object[] args)            throws Throwable {        PersonService service = (PersonService) this.targetObject;        Object result = null;        if (service.getUser() != null) {            result = method.invoke(this.targetObject, args);        }        return result;    }}

  

AOP中的一些概念:

Aspect(切面):指横切性关注点的抽象即为切面,它与类相似,只是两者的关注点不一样,类是对物体特征的抽象,而切面横切性关注点的抽象.

 

joinpoint(连接点):所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点,实际上joinpoint还可以是field或类构造器)

 

Pointcut(切入点):所谓切入点是指我们要对那些joinpoint进行拦截的定义.

 

Advice(通知):所谓通知是指拦截到joinpoint之后所要做的事情就是通知.通知分为前置通知,后置通知,异常通知,最终通知,环绕通知

 

Target(目标对象):代理的目标对象

 

Weave(织入):指将aspects应用到target对象并导致proxy对象创建的过程称为织入.

 

Introduction(引入):在不修改类代码的前提下, Introduction可以在运行期为类动态地添加一些方法或Field.

 

 

转载于:https://www.cnblogs.com/E-star/p/3560684.html

你可能感兴趣的文章
针对降质模型中的模糊SR
查看>>
ios开发学习笔记001-C语言基础知识
查看>>
POJ1142Smith Numbers一道简单的数学题
查看>>
UIButton(改变Title和image位置)
查看>>
Linux-使用之vim编译安装出现的问题
查看>>
codevs 3314 魔法森林
查看>>
mac os x mysql 出现./mysql: unknown variable 'sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABL 问题...
查看>>
桐桐的贸易--WA
查看>>
历届试题 高僧斗法
查看>>
linux命令系列 stat & touch
查看>>
[Tools] Webstorm Github的配置与使用
查看>>
鬼谷子绝学
查看>>
Mongodb 笔记04 特殊索引和集合、聚合、应用程序设计
查看>>
使用Post/Redirect/Get实现Asp.net防止表单重复提交
查看>>
用Html5与Asp.net MVC上传多个文件
查看>>
lambda函数,常用函数,内置函数(string,zip()map()filter())的用法
查看>>
Xcode中匹配的配置包的存放目录
查看>>
JavaScript将具有父子关系的原始数据格式化成树形结构数据(id,pid)
查看>>
MySQL服务使用
查看>>
C语言练手自己编写学生成绩管理系统
查看>>