CGLIB动态代理

CGLIB动态代理:
针对类来实现代理的,对指定目标类产生一个子类,通过方法拦截技术拦截所有父类方法的调用。
而JDK动态代理只能代理实现了接口的类,没有实现接口的类是不可以被代理的。

开始引入pom:



    cglib
    cglib
    3.1

被代理类:

public class Car{

    public void move(){
        System.out.println("小汽车行驶中...");
    }
}

Cglib代理测试类:

public class CglibProxy implements MethodInterceptor {

    private Enhancer enhancer = new Enhancer();


    //通过这个方法,我们就可以得到代理类
    public Object getProxy(Class clazz){
        //设置创建子类的类
        enhancer.setSuperclass(clazz);
        enhancer.setCallback(this);
        return enhancer.create();
    }


    /**
     * 方法作用:拦截所有目标类方法的调用
     * @param o 目标类的实例
     * @param method 目标方法的反射对象
     * @param objects 方法的参数
     * @param methodProxy 代理类的实例
     * @return
     * @throws Throwable
     */
    @Override
    public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
        System.out.println("记录日志开始...");
        //代理类调用父类的方法
        methodProxy.invokeSuper(o,objects);
        System.out.println("记录日志结束...");
        return null;
    }


    /**
     * 测试main
     * @param args
     */
    public static void main(String[] args) {
        CglibProxy proxy = new CglibProxy();

        Car car = (Car) proxy.getProxy(Car.class);

        car.move();
    }

打印结果:

记录日志开始...
小汽车行驶中...
记录日志结束...

你可能感兴趣的:(CGLIB动态代理)