【动态代理】cglib

75 阅读1分钟

cglib是通过生成代理类的子类,替被代理类完成工作的。 所以被代理类不能使用final关键词修饰

使用Enhaner的静态方法create生成代理类的之类

方法中传入两个参数被代理类的Class对象,和一个MethodInterceptor

重写MethodInterceptorintercept方法

代码如下

public class DynamicTest {
    public static void main(final String[] args) {
        // 创建一个目标类对象,也就是顾客对象
        final Customer customer = new Customer();
        MethodInterceptor interceptor = new MethodInterceptor() {
            @Override
            public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
                System.out.println("执行了动态代理");
                Object invoke = method.invoke(customer, args);
                return "动态代理返回结果:"+invoke;
            }
        };
        Customer diliver = (Customer)Enhancer.create(customer.getClass(),interceptor);
        String result = diliver.order("小黄鱼");
        System.out.println(result);
    }
}