Spring默认使用JDK动态代理来实现AOP,如果业务对象没有实现接口,默认使用CGLIB代理,面向接口编程是一个良好得习惯,尽量不要面向具体类
首先,有个Dog接口








然后给出这个接口的实现类:




















DogFactory:
































下面是一个通用类:没有和任何特定的类耦合






























上述代码通过mehtod对象的invoke方法,可以完成目标对象得方法可调用,目标是Object类型,可以使任何业务实现类,在目标对象的info方法中,进行了功能增强(多打印了begin和end)
代理工厂:

















Dynamic Proxy要求被代理的必须是接口的实现类,都则无法为其构造相应的动态类,所以Spring对接口全部采用Dynamic Proxy 实现AOP,对没有实现接口的类采用CGLIB
测试代码:




















结果:
begin
我是一只猎狗
end
我奔跑迅速