JDK动态代理是基于接口的方式,换句话来说就是代理类和目标类都实现同一个接口,那么代理类和目标类的方法名就一样了;CGLib动态代理是代理类去继承目标类,然后重写其中目标类的方法,这样也可以保证代理类拥有目标类的同名方法.

public class MyMethodIntercepter implements MethodInterceptor {
    /*
     * 第一个参数:代理的对象
     * 第二个参数:对象中的方法
     * 第三个参数:方法的参数
     * 第四个参数:生成的代理类
     **/
    @Override
    public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
        System.out.println("cglib...");
        return methodProxy.invokeSuper(o,objects);
    }
}
public class IndexService {
    public IndexService() {
        System.out.println("IndexService init....");
    }
    public void print(){
        System.out.println("indexservice...");
    }
    public void quety(){
        System.out.println("query.....");
    }
}
public class Test01 {
    public static void main(String[] args) {
        Enhancer enhancer = new Enhancer();
        //增强父类,cglib是基于继承的
        enhancer.setSuperclass(IndexService.class);
        //名字生成策略
        enhancer.setNamingPolicy(SpringNamingPolicy.INSTANCE);
        //过滤方法
        enhancer.setCallback(new MyMethodIntercepter());

        //创建代理对象
        IndexService indexService = (IndexService) enhancer.create();
        indexService.quety();
    }
}