Cglib

一 : 把增强器和拦截器放在一起




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 {




@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;
}
}
posted @ 2019-08-22 20:30  lcj12121  阅读(191)  评论(0编辑  收藏  举报