一 : 把增强器和拦截器放在一起
public class Dog {
public void run(){
System.out.println("小狗正在吃东西。。。。");
}
public void eat(){
System.out.println("小狗正在吃东西。。。。");
}
}
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
import java.lang.reflect.Method;
public class myIMethodInterceptor implements MethodInterceptor {
private Object target;
public myIMethodInterceptor(Object target) {
this.target = target;
}
public Object getInstance(){
//创建增强器
Enhancer enhancer = new Enhancer();
//设置代理目标类
enhancer.setSuperclass(target.getClass());
//设置回调函数
enhancer.setCallback(this);
Object o = enhancer.create();
return o;
}
@Override
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
System.out.println("这就是增强哈。。上上。。。");
Object o1 = methodProxy.invokeSuper(o, objects);
System.out.println("这就是增强哈。。。下下。。");
return o1;
}
}
import net.sf.cglib.core.DebuggingClassWriter;
public class Demo {
public static void main(String[] args) {
System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY, "e:\\aaa");
//创建目标类
Dog target = new Dog();
//创建代理
myIMethodInterceptor proxy = new myIMethodInterceptor(target);
Object d = proxy.getInstance();
Dog dd = (Dog)d;
dd.eat();
dd.run();
}
}
二 : 没把增强器和拦截器放在一起
import net.sf.cglib.core.DebuggingClassWriter;
import net.sf.cglib.proxy.Enhancer;
public class CglibProxy {
public static void main(String[] args) {
//在指定目录生成动态代理类
//我们可以反编译看一下里面的代码
System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY, "e:\\aaa");
//创建Enhanced对象,类似于JDK动态代理中的Proxy,下一步就是设置几个参数
Enhancer enhancer = new Enhancer();
//设置目标类的字节码文件
enhancer.setSuperclass(Dog.class);
//设置回调函数
enhancer.setCallback(new MyMethodInterceptor());
//这里的creat方法就是正式创建代理类
Object o = enhancer.create();
Dog dog = (Dog) o;
dog.run("黑子");
dog.eat();
}
}
public class Dog {
public void run(String name){
System.out.println("小狗的名字"+name+"....run");
}
public void eat(){
System.out.println("狗。。。。eat");
}
}
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
import java.lang.reflect.Method;
public class MyMethodInterceptor implements MethodInterceptor {
@Override
public Object intercept(Object o, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
System.out.println("这是对目标类进行增强。。。。");
//注意这是方法的调用,不是反射
Object resout = methodProxy.invokeSuper(o,args);
return resout;
}
}
import net.sf.cglib.proxy.MethodInterceptor;import net.sf.cglib.proxy.MethodProxy;import java.lang.reflect.Method;public class MyMethodInterceptor implements MethodInterceptor { @Overridepublic Object intercept(Object o, Method method, Object[] args, MethodProxy methodProxy) throws Throwable { System.out.println("这是对目标类进行增强。。。。"); //注意这是方法的调用,不是反射Object resout = methodProxy.invokeSuper(o,args); return resout; }}