cglib是通过生成代理类的子类,替被代理类完成工作的。
所以被代理类不能使用final关键词修饰
使用Enhaner的静态方法create生成代理类的之类
方法中传入两个参数被代理类的Class对象,和一个MethodInterceptor
重写MethodInterceptor的intercept方法
代码如下
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);
}
}