AOP即面向切面编程。AOP是基于代理模式的。

代理模式:

当我们需要修改一个类,在类中加入代码时,为了不破坏这个类的封装性。可以使用代理模式,建立一个代理类。

比如:修改需求,在调用UserController类的saveUser()方法之前要判断用户是否有权限,普通的办法我们可以直接修改类中的saveUser()方法。用代理模式就是,建立一个代理类,在调用saveUser()方法之前再加入鉴权的方法,以后调用时我们调用代理类,而不直接调用UserController类了。

class UserControllerProxy {private UserController userController;public void saveUser() {checkAuth();userController.saveUser();}
}

不过这只是静态代理,AOP的一个重要应用是Spring AOP,它是基于动态代理的,道理和静态代理差不多。对于实现了接口的,Spring AOP会使用JDK Proxy,去创建代理对象,后面直接调用代理对象,而对于没有实现接口而是继承了类的对象,Spring AOP会使用Cglib,生成一个被代理对象的子类,后面直接调用子类。

不过Spring AOP是在程序运行的过程中织入的,是动态织入。还有一种面向切面的是AspectJ,它是基于静态织入的。静态织入是指在编译时期就织入,即编译出来的class文件,字节码就已经被织入了。官方文档的一张图:

AOP相关概念:

将多个类共有的功能抽象出来,形成一个新的类,这个类就叫做切面,或者切片(Aspect),在我们需要用到这个功能的时候就调用这个切面类中的方法,依靠依赖注入DI将功能注入进去。

例如上面的添加鉴权功能,就可以建立一个鉴权的切面类,在需要用到的地方切进去,这个切入的地方就叫做切入点(Joinpoint)。类似的功能就是拦截器(Intercepter)。拦截这个概念是AOP的一种实现策略,在某个方法被执行时,拦截器可以拦截下来,在方法执行之前执行别的方法,比如鉴权。也可以在方法执行之后再执行别的方法,拦截器就是一个动态拦截Action调用的对象。他提供了中机制是开发者可以在一个Action执行之前或执行之后插入需要的代码。

Spring AOP的作用,动态代理模式相关推荐

  1. Spring AOP 概念及动态代理模式

    Spring AOP 概念及动态代理模式 文章目录 Spring AOP 概念及动态代理模式 1 AOP 的概念及相关术语 2 AOP 作用 3 AOP 原理概述 3.1 JDK 动态代理(Proxy ...

  2. AOP、ASPECT、Spring AOP、JDK动态代理、CGLib动态代理

    AOP.ASPECT.Spring AOP.JDK动态代理.CGLib动态代理 1 AOP介绍 1.1 基本定义 AOP(Aspect Oriented Programming)称为面向切面编程,它是 ...

  3. Spring Boot实践——Spring AOP实现之动态代理

    Spring AOP 介绍 AOP的介绍可以查看 Spring Boot实践--AOP实现 与AspectJ的静态代理不同,Spring AOP使用的动态代理,所谓的动态代理就是说AOP框架不会去修改 ...

  4. ❤️Spring的静态、动态代理模式

    ❤️Spring的静态/动态代理模式 为什么要学习代理模式,因为AOP的底层机制就是动态代理! 代理模式: 静态代理 动态代理 1.静态代理 静态代理角色分析 抽象角色 : 一般使用接口或者抽象类来实 ...

  5. Spring AOP中的动态代理主要有两种方式,JDK动态代理和CGLIB动态代理:

    ① JDK动态代理只提供接口的代理,不支持类的代理,要求被代理类实现接口.JDK动态代理的核心是InvocationHandler接口和Proxy类,在获取代理对象时,使用Proxy类来动态创建目标类 ...

  6. 关于Spring AOP,除了动态代理、CGLIB,你还知道什么?

    来源 | 草捏子 责编 | Carol 封图 | CSDN 付费下载于视觉中国 Spring 作为 Java 中最流行的框架,主要归功于其提供的 IOC 和 AOP 功能.本文将讨论 Spring A ...

  7. Spring——AOP操作 AspectJ动态代理方式

    有几天没有学习spring了,今天继续学习尚硅谷spring aop,讲的挺详细的,推荐去看看. 文章目录 一.准备工作 1.导入AspectJ依赖 2.切入点表达式 二 .配置文件实现 1.创建类( ...

  8. Spring AOP基础—JDK动态代理

    JDK动态代理主要涉及到java.lang.reflect包中的两个类:Proxy和InvocationHandler.其中InvocationHandler动态创建一个符合某一接口的实例,生成目标类 ...

  9. Spring AOP源码分析(四)Spring AOP的JDK动态代理

    2019独角兽企业重金招聘Python工程师标准>>> 本篇文章将会介绍上一个例子中的源码执行情况,从中熟悉整个SpringAOP的一些概念和接口设计. 首先整个SpringAOP的 ...

  10. java Spring的AOP理解和动态代理

    Spring的AOP OOP面向对象,允许开发者定义纵向的关系,但并不适用于定义横向的关系,会导致大量代码的重复,而不利于各个模块的重用. AOP,一般称为面向切面,作为面向对象的一种补充,用于将那些 ...

最新文章

  1. pandas使用read_csv函数读取文件最后N行数据并保留表头、pandas使用read_csv函数读取网络url链接数据
  2. linux下杀死进程的10种方法
  3. 在UpdatePanel中弹出对话框
  4. 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 F Color it
  5. Google protobuf使用技巧和经验
  6. hive substr函数_数据分析工具篇——HQL函数及逻辑
  7. 吴恩达的2021回顾,这些大事件影响了AI这一年
  8. 最萌办公室采访 | 网易程序员灵魂大拷问(文末有福利)
  9. vi执行Linux命令,如何从Vim中访问shell或运行外部命令
  10. Spring Session——@EnableSpringHttpSession注解
  11. git 修改本地用户名_git简单介绍
  12. AngularJS中$apply
  13. arcgis 经纬度转大地坐标_ArcGIS的地理坐标系与大地坐标系
  14. 如何判断一对一、一对多和多对多的关系
  15. entrez检索系统要服务器吗,Entrez检索系统的简介.doc
  16. python简易中文名转英文小程序
  17. 使用java压缩文件成zip——三种方式压缩文件速度对比
  18. 大疆DJI 精灵 4 RTK 镜头很暗 ISO
  19. 与一名上海学生深度交流上大学的事
  20. 对前端的一些粗浅的认识

热门文章

  1. goaheadlinux移植_web服務器goahead移植到Linux開發板
  2. php x24 x65 x6d x61,Jboss远程代码执行漏洞CVE:2013-4810获得system权限
  3. wiki php markdown,一款支持Markdown语法的Wiki知识管理系统:Wikitten搭建教程
  4. python爬虫学习基础教程,批量抓取美女图片!
  5. Matlab高光谱遥感、数据处理与混合像元分解及典型案例
  6. Idea上传GitHub时报错:push failed: fatal: unable to access ‘https://github.com/***port 443: Timed out
  7. 如何在 Creator3D 中切换模型贴图,超级简单!
  8. 简述CPU,内存,硬盘,指令之间的关系
  9. java技术知识简介
  10. 软件测试复习09:集成测试、系统测试、验收测试、回归测试