spring的面向切面编程是基于动态代理来实现的
静态代理:也就是自己手动创建的代理对象
动态代理:也就是在程序运行中通过配置参数产生
在spring中动态代理有两种
第一种JDK自带的动态代理(JDK是基于接口)
JDK动态代理是利用反射机制生成一个实现代理接口的匿名类,JDK动态代理依赖于Proxy和InvocationHandler接口。
需要指定一个类加载器,然后生成的代理对象实现类的接口或类的类型,接着处理额外功能,
第二种是CGLIB的动态代理(基于继承父类生成的代理类)
CGLIB是动态代理利用的asm的开源包,对代理对象的Class文件进行加载,通过修改其字节码生成的子类来处理,CJLIB是JDK代理的一种补充,不管代理者是否实现接口,都可以为其创建代理对象