关于CGLIB 和 PROXY 的两个小例子
来源:互联网 发布:c语言程序源代码 编辑:程序博客网 时间:2024/05/22 03:24
大家应该都知道动态代理,在java中动态代理有两种实现方式 CGLIB PROXY
CGLIB :是通过继承的方式来实现的,所以无法代理 FINAL的类
PROXY; 是通过实现接口的方式来实现的,所以返回的结果是需要通过接口去接
通过代理后:就可以在代码中为所欲为的地方,添加自己的拦截器了, 这其实也就是AOP了
两个例子
CGLIB:
public class CGLIBProxy implements MethodInterceptor{
private Enhancerenhancer = new Enhancer();
/**
* 获取代理对象
* @param obj 传入想要被代理的对象
* @return 返回代理新的代理对象
*/
public Object getProxy(Classclazz){
//设置父类
enhancer.setSuperclass(clazz);
enhancer.setCallback(this);
//创建子类实例
return enhancer.create();
}
/**
*这是一个回调的方法
*被代理类的所有方法都会被拦截
*/
public Object intercept(Objectobj, Method method, Object[]args,MethodProxy methodproxy)throws Throwable {
System.out.println("可以在方法执行前为所欲为");
//调用父类中的方法
Object result =methodproxy.invokeSuper(obj,args);
System.out.println("可以在方法后为所欲为");
returnresult;
}
}
PROXY:
public class DynamicProxy implements InvocationHandler{
private Objectobj = null;
/**
* 获取代理对象
* @param obj 传入想要被代理的对象
* @return 返回代理新的代理对象
*/
public Object getNewInstance(Objectobj) {
this.obj =obj;
//通过接口方式创建实例
return Proxy.newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(), this);
}
/**
*这是一个回调的方法
*被代理类的所有方法都会被拦截
*/
public Object invoke(Objectproxy, Method method, Object[]args) throws Throwable {
System.out.println("可以在方法执行前为所欲为");
//通过代理类调用父类中的方法
Object result =method.invoke(this.obj,args);
System.out.println("可以在方法后为所欲为");
returnresult;
}
}
- 关于CGLIB 和 PROXY 的两个小例子
- cglib的小例子
- 关于oracle触发器的两个小例子
- 关于return的两个小例子
- 代理:Proxy和Cglib
- 关于Finereport移动端报表二次开发的两个小例子
- CGLib动态代理原理及实现的一个小例子
- 两个关于runloop的例子
- 转:收集两个关于xml和xsl的例子。
- java动态代理,proxy和cglib
- 动态代理Proxy和CGLib区别
- Dynamic proxy 与cglib的简单实现
- Dynamic proxy与 CGLib 的区分
- 动态代理proxy与CGLib的区别
- CGlib与Java Proxy的动态代理
- 动态代理proxy与CGLib的区别
- 动态代理proxy与CGLib的区别
- 动态代理proxy与CGLib的区别
- UEFI引导win10+ubuntu16.04双系统,解决“Minimal BASH-like line editing is supported”
- 关于用idea开发配置javaEE项目需要注意的
- mysql外键类型
- Math.random()函数生成n到m间的随机数字
- nodelet
- 关于CGLIB 和 PROXY 的两个小例子
- java 发起http请求
- oracle字符类型时间转换 ORA-01843 无效的月份
- 封装XHR对象
- 据说家长们被这道小学数学题套路到哭!你的答案是_____
- 无法解决R_AARCH64_ADR_PREL_PG_HI21重定向于符号__stack_chk_guard@GLIBC_2.17
- ScheduleThreadPoolExecutor的工作原理与使用示例
- QT中生成字符串md5的方法
- Android:Java Coding Guidelines插件的使用(Mac系统)