动态代理总结

1.从JDK或者CGLIB动态代理到Spring的动态代理,大家会发现他们的共同点都是编程式的去生成代理对象,通常我们的spring项目中不会直接去使用他们,因为这样使用他们太麻烦,我们希望能直接从Spring容器种拿到代理对象(bean),所以Spring提供了AOP的功能,声明式的指定被代理类和切点,从而通过Spring容器帮你生成代理对象(bean)。

2.Spring的动态代理整合了CGLIB和JDK动态代理,提供了Adivce的概念,一般支持四种advice - beforeAdvice,afterReturningAdvice,afterThrowingAdvice,around。AspectJ多一种advice就是afterAdvice,就是最后finally里面执行。

3.其实Spring的AOP有两种实现

第1种就是Spring的动态代理(再底层也就是JDK和CGLIB)
第2种就是AspectJ - 也是一个项目

第1种都是要通过Spring的一些扩展功能比如FactoryBean,BeanPostProcessor,把代理对象交给Spring管理。

第2种是Spring支持了AspectJ的注解,Spring容器启动的时候会去解析AspectJ的注解例如@Aspect,@Jointpoint。。生成对应的Adivice  bean (增强Bean)

但是有个开关@EnableAspectJAutoProxy

4.AspectJ是在编译期增强,意思就是在编译的时候生成代理类
   JDK和CGLIB是在运行期增强,意思就是运行时生成代理类

你可能感兴趣的:(动态代理总结)