package javaDesignModule.cglibproxy;
import java.lang.reflect.Method;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
public class CglibProxy implements MethodInterceptor{
/**目标对象*/
private Object targetObj;
/**
* 创建代理对象
* @param obj
* @return
*/
public Object getInstance(Object obj) {
this.targetObj = obj;
Enhancer enhancer = new Enhancer();//用这个类创建代理对象(对代理类的子类)
enhancer.setSuperclass(targetObj.getClass());//设置被代理类作为其父类
enhancer.setCallback(this);//设置回调 当代理对象的方法被调用时 回调方法intercept()会被执行
return enhancer.create();//返回创建的代理对象
}
@Override
public Object intercept(Object targetObj, Method method, Object[] arg2, MethodProxy mp) throws Throwable {
Object obj = null;
try {
before();
//调用cglib的代理对象 所属的父类被代理的方法
obj = mp.invokeSuper(targetObj, arg2);
after();
} catch (Exception e) {
e.printStackTrace();
//记录日志
}
return obj;
}
/**
* 身份验证
*/
public void before(){
System.out.println("前置增强--------------");
}
public void after(){
System.out.println("后置增强..." );
}
}
package javaDesignModule.cglibproxy;
import javaDesignModule.staticproxy.TicketManager;
import javaDesignModule.staticproxy.TicketManagerImpl;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
CglibProxy cglibProxy = new CglibProxy();
TicketManager tm = (TicketManager) cglibProxy.getInstance(new TicketManagerImpl());
tm.soldTicket();
tm.changeTicket();
tm.returnTicket();
}
}
个人借鉴前辈的代码,勿喷
分享到:
相关推荐
java静态代理 jdk动态代理 cglib动态代理 代理原理
AOP之JDK动态代理和CGLib动态代理 ,具体效果和过程看博文 http://blog.csdn.net/evankaka/article/details/45195383
基于MAVEN项目的CGLib动态代理原理及实现
该资源里面有Jdk动态代理,cglib动态代理,反射和拦截器(链)示例,里面也有所需要的jar包,下载下来导入eclipse即可运行,有问题请问我
代理模式详解-jdk与cglib动态代理与底层实现,spring中常用的设计模式,本案例是从源码到代理模式的实现。
jdk和cglib动态代理的例子{jar包+源码} 解压:如有问题 用快压
cglib实现动态代理,有源代码,详细的实例,逐步分析,实现动态代理。
NULL 博文链接:https://agileshell.iteye.com/blog/1857897
CGlib动态代理类jar包,一共四个jar包,模拟CGlib动态代理用得到。
JDK动态代理必须提供接口才能使用,在一些不能提供接口的环境中,只能采用其他第三方技术,比如CGLIB动态代理,这里提供CGLIB动态代理的相关jar包,供学习和测试使用。
cglib动态代理相关jar包,亲测可用cglib动态代理相关jar包,亲测可用cglib动态代理相关jar包,亲测可用
JAVA动态代理实现Demo(JDK动态代理和CGLIB动态代理)
cglib动态代理用到的两个包 cglib动态代理用到的两个包 cglib动态代理用到的两个包
* Cglib代理(子类代理) * 可以在运行期,扩展java类与实现接口,在内存中创建一个子类对象,实现代理功能 * 底层通过字节码处理框架ASM,转换字节码并生成新的类 * 被代理类都不需要实现接口 * 代理类需要实现...
cglib-nodep-2.1_3.jar、asm-2.2.3.jar、asm-commons-2.2.3.jar、asm-util-2.2.3.jar四个包
cglib动态代理资源包
静态代理、jdk动态代理、cglib动态代理
Java 动态代理详解(代理模式+静态代理+JDK动态代理+CGLIB动态代理)
JDK动态代理和Cglib动态代理实例源码
cglib动态代理技术所需要的Jar包,注意只需要一个jar就可以! cglib-nodep-2.2.2.jar 这个包里面包含了asm的引用,无需在引用!