spring|Java程序员必知:Spring面试之AOP(JDK动态代理实现)
文章图片
文章图片
文章图片
Spring面试之AOP什么是AOP在软件业 , AOP为Aspect Oriented Programming的缩写 , 意为:面向切面编程 , 通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术 。 AOP是OOP的延续 , 是软件开发中的一个热点 , 也是Spring框架中的一个重要内容 , 是函数式编程的一种衍生范型 。 利用AOP可以对业务逻辑的各个部分进行隔离 , 从而使得业务逻辑各部分之间的耦合度降低 , 提高程序的可重用性 , 同时提高了开发的效率 。
对以上描述总结一下 , 在Spring中主要体现为以下几点:
Aspect Oriented Programming
AOP采取了横向抽取机制 , 取代了传统纵向继承体系重复性代码(性能监视、事务管理、安全检查、缓存)
解决问题方法
传统是这样的 , 每次权限校验前 , 进行调用接口的方法 。
纵向继承在没有AOP的时候 , 我们是这样解决权限校验的 , 写一个类 , 里面有权限校验的方法 , 然后子类继承这个类 , 子类里不仅有相关业务操作 , 同时因为继承了父类 , 所以同时有权限校验方法 。 可以对他进行直接调用 。 这样的话 , 只要需要权限校验就必须实现父类 。
横向抽取机制采用横向抽取机制 , 取代传统的继承 。 所谓横向抽取机制 , 就是一个代理机制 , 利用JDK动态代理产生一个代理类 , 在代理类中对相关业务方法进行一个代码增强 。
- Spring AOP使用纯Java实现 , 不需要专门的编译过程和类加载器 , 在运行期通过代理方式向目标类织入代码增强 。
- 相关术语
JoinPoint(连接点):指那些被拦截到的点 , 在Spring中 , 这些点指的是方法 , 因为Spring只支持方法类型的连接点 。
所有可以被增强的方法 , 这些方法被称为连接点 。
Pointcut(切入点):是指我们要对哪些Jointpoint进行拦截的定义 。
指向对某一个方法进行增强 , 被增强的方法称为切入点
Advice(通知/增强):是指拦截到JoinPoint之后要做的事情 , 通知分为:前置通知、后置通知、异常通知、最终通知、环绕通知 。
对某一个方法进行拦截后要做的事情
Introduction(引介):引介是一种特殊的通知在不修改类代码的前提下 , Introduction可以在运行期为类动态地添加一些方法或 Field(属性) 。
类增强技术 , 通过第三方来完成
Target(目标对象):代理的目标对象 。
被增强的对象 , 就是要增强的方法所属的那个类 。
Weaving(织入):是指把增强应用到目标对象来创建新的代理对象的过程 。 Spring采用动态代理织入 , 而AspectJ采用编译期织入和类装载期织入 。
将Advice应用到Target的这个过程
Proxy(代理):一个类被AOP织入增强后 , 就产生一个结果代理类 。
织入过程中会产生代理类 。
Aspect(切面):是切入点和通知(引介)的结合 。
方法和增强方法的组合
- 原理JDK动态代理
推荐阅读
- 程序员|强力支持!国家再出重拳,这是要彻底解决华为芯片危机
- Java|Java项目搜索功能的实现
- 程序员|37岁程序员裸辞,四个月被497家公司拒绝,问猎头后懵了
- Java|面试三年经验的程序员,感觉简历在造假!连个简单的题目都不会
- 游龙战神|-启动流程,好程序员Java培训分享SpringBoot
- 程序员|漫画:程序员的宿命,真实的反映了我现在的状况。何时是个头?
- 程序员|那些还在外包公司干的程序员们,快醒醒吧
- Java|Java重写equals方法时为什么要重写hashCode方法
- 移动互联网|干了两年 Java,自考本科,15k,很难有机会进大厂?
- Java|一份好的 Java 开发简历,让面试官眼前一亮,到底长啥样?