AOP(Aspect-OrientedProgramming,面向切面编程),采用横向抽取机制,取代了传统纵向继承体系重复性代码(性能监视,事物管理,安全检测,缓存)
Spring AOP使用纯java实现,不需要专门的编译过程和类加载器,在运行期通过代理方式向目标类织入增强代码。
1.JDK动态代理
1.1使用
可参考链接:http://c.biancheng.net/view/4269.html
1.2局限性
局限性:因为 JDK 动态代理必须要实现一个或多个接口,如果不希望实现接口,则可以使用 CGLIB 代理。
2.CGLIB生成代理
这种方法的核心就是Enhancer:
可参考链接:http://c.biancheng.net/view/4271.html
3.小结
- Spring在运行期,生成动态代理对象,不需要特殊的编译器。、
- Spring AOP的底层就是通过JDK动态代理或CGLib动态代理技术为目标bean执行横向织入
2.1 若目标对象实现了若干接口,spring使用JDK的java.lang.reflect.Proxy类代理。
2.2若目标对象没有实现任何接口,spring使用CGLIB库生成目标对象的子类。
4.AspectJ
AspectJ 是一个基于 Java 语言的 AOP 框架,它扩展了 Java 语言。Spring 2.0 以后,新增了对 AspectJ 方式的支持,新版本的 Spring 框架,建议使用 AspectJ 方式开发 AOP。
可参考:http://c.biancheng.net/view/4275.html