5. 使用Spring进行面向切面编程

概念

AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。

1、横切关注点:对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点。

2、切面(aspect):类是对物体特征的抽象,切面就是对横切关注点的抽象

3、连接点(joinpoint):被拦截到的点,因为Spring只支持方法类型的连接点,所以在Spring中连接点指的就是被拦截到的方法.

4、切入点(pointcut):对连接点进行拦截的定义

5、通知(advice):所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置、后置、异常、最终、环绕通知五类

6、目标对象:代理的目标对象

7、织入(weave):将切面应用到目标对象并导致代理对象创建的过程

8、引入(introduction):在不修改代码的前提下,引入可以在运行期为类动态地添加一些方法或字段.

讨论

1.什么是面向切面编程AOP?
这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。

2.前文提到jdk代理和cglib代理两种动态代理,优秀的spring框架把两种方式在底层都集成了进去,我们无需担心自己去实现动态生成代理。那么,spring是如何生成代理对象的?

如果有接口,则使用Jdk代理,反之使用Cglib。spring AOP综合两种代理方式的使用前提有会如下结论:如果目标类没有实现接口,且class为final修饰的,则不能进行spring AOP编程!

3.Spring AOP原理为什么用2种实现方式?JDKProxy和Cglib?
JDK动态代理只能代理接口类,所以很多人设计架构的时候会使用

XxxService, XxxServiceImpl的形式设计,一是让接口和实现分离,二是也有助于代理。

为什么不都使用Cgilb代理:

因为JDK动态代理不依赖其他包,Cglib需要导入ASM包,对于简单的有接口的代理使用JDK动态代理可以少导入一个包。

AOP 代理

  • spring 默认使用 标准 jdk 动态代理,也可以使用 CGLIB 代理

spring aop 和 aspectj 的区别

其实对于AOP而言,AspectJ 也是一种非常优秀的解决方案,AspectJ 会在编译期对源码进行织入,从而达到方法增强的效果,不过要使用AspectJ 需要对字节码有一定的了解,而且还要学习AspectJ的语法,需要一定的学习成本。对于Spring 来说,采用动态织入的方法,在运行期生成代理类,从而达到增强的效果。

reference

java 关于AOP

Spring-aop 全面解析(从应用到原理)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本章内容: 面向切面编程的基本原理 通过POJO创建切面 使用@AspectJ注解 为AspectJ切面注入依赖 ...
    谢随安阅读 8,523评论 0 9
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,265评论 19 139
  • 遇见更好的自己 南通市通州区育才中学 初二(15)张王佳怡 沉浸在盛夏的斑斓中,嘤嘤鸟语,泠泠泉声,在耳畔萦绕亲昵...
    简约语文阅读 4,453评论 0 2
  • 新巅峰白香君成长日志 导师:胡中海 2015.7.31 今天在和儿子交流中发现了自身的问题,也认识到教育孩子应该以...
    幸福妈妈雨后阳光阅读 1,310评论 0 0
  • 表面上并不般配的爱情,往往和谐,因为产生这样的爱情,往往有比较深刻的内在原因;表面上般配的爱情,往往并不和谐,因为...
    Alice王志荣阅读 2,118评论 0 1

友情链接更多精彩内容