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执行之前或执行之后插入需要的代码。 
————————————————
版权声明:本文为CSDN博主「藤原豆腐店-」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wanderlustLee/article/details/80457698

Spring AOP的作用,动态代理模式的更多相关文章

  1. Spring AOP中的动态代理

    0  前言 1  动态代理 1.1 JDK动态代理 1.2 CGLIB动态代理 1.2.1 CGLIB的代理用法 1.2.2 CGLIB的过滤功能 2  Spring AOP中的动态代理机制 2.1  ...

  2. 转:Spring AOP中的动态代理

    原文链接:Spring AOP中的动态代理 0  前言 1  动态代理 1.1 JDK动态代理 1.2 CGLIB动态代理 1.2.1 CGLIB的代理用法 1.2.2 CGLIB的过滤功能 2  S ...

  3. spring---aop(4)---Spring AOP的CGLIB动态代理

    写在前面 前面介绍了Spring AOP的JDK动态代理的过程,这一篇文章就要介绍下Spring AOP的Cglib代理过程. CGLib全称为Code Generation Library,是一个强 ...

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

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

  5. Spring AOP实现原理-动态代理

    目录 代理模式 静态代理 动态代理 代理模式 我们知道,Spring AOP的主要作用就是不通过修改源代码的方式.将非核心功能代码织入来实现对方法的增强.那么Spring AOP的底层如何实现对方法的 ...

  6. spring---aop(2)---Spring AOP的JDK动态代理

    写在前面 spring 事务是springAOP 的一个实现.我们以分析spring的事务,来分析spring的AOP实现. 基本知识 如果目标方法被spring的事务声明,则执行该目标方法的对象就会 ...

  7. Spring AOP系列(二) — 动态代理引言

    接上一篇Spring AOP系列(一)- 代理模式,本篇来聊聊动态代理. 动态代理与静态代理的区别 要想了解动态代理与静态代理的区别,需要有两个前置知识点:java程序是如何执行的以及类加载机制. j ...

  8. Spring AOP关于cglib动态代理

    一: Spring AOP的默认代理方式是jdk动态代理,还有另外一种代理方式是cglib代理,简单说前者基于接口,后者基于继承,基本思路是将被代理对象的类作为父类,然后创建子类来进行方法的调用,调用 ...

  9. Spring AOP系列(三) — 动态代理之JDK动态代理

    JDK动态代理 JDK动态代理核心是两个类:InvocationHandler和Proxy 举个栗子 为便于理解,首先看一个例子: 希望实现这样一个功能:使用UserService时,只需关注自己的核 ...

  10. Spring代理模式(jdk动态代理模式)

    有动态代理和静态代理: 静态代理就是普通的Java继承调用方法. Spring有俩种动态代理模式:jdk动态代理模式 和 CGLIB动态代理 jdk动态代理模式: 代码实现: 房东出租房子的方法(继承 ...

随机推荐

  1. 【HC89S003F4开发板】 7ASM&C混合编程

    HC89S003F4开发板ASM&C混合编程 一.前言 在配套资料里有实现ASM&C混合编程的说明文档,这里来实现这个功能. 二.实现ASM&C混合编程 1.打开 Keil 工 ...

  2. 写一个vue的滚动条插件

    组件源码如下: vue-scroll.vue <template> <div class="vue-scroll" ref="vueScrollW&qu ...

  3. jquery.marquee

    http://aamirafridi.com/jquery/jquery-marquee-plugin#examples <script src="/plugins/marquee/j ...

  4. ffmpeg 播放器原理

    1  播放器过程 线程1 : readPackets-------> audio_packets队列   video packets 队列 线程2: decodeAudio && ...

  5. elementui限制开始日期和结束日期

    项目需求:开始日期和结束日期 禁用当前日期之前的日期.同时结束日期 禁用开始日期之前的日期 <div class='startTime'> 开始时间:<el-date-picker ...

  6. 本地数据存储解决方案以及cookie的坑

    本地数据存储解决方案以及cookie的坑 问题: cookie过长导致页面打开失败 背景: 在公司的项目中有一个需求是打开多个工单即在同一个页面中打开了多个tab(iframe),但是需要在刷新时只刷 ...

  7. Qt定时器

    PS: 本案例使用的是Qt 4.8.4版本,不同版本代码可能会有差异. 第一步: // 重写此虚函数(继承自QObject) virtual void timerEvent(QTimerEvent* ...

  8. djangoNotes

    学员管理 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...

  9. CentOS7安装CDH 第十一章:离线升级CDH版本

    相关文章链接 CentOS7安装CDH 第一章:CentOS7系统安装 CentOS7安装CDH 第二章:CentOS7各个软件安装和启动 CentOS7安装CDH 第三章:CDH中的问题和解决方法 ...

  10. Python函数Day3

    一.函数名的应用 函数名类似于特殊的变量,打印函数名就是打印函数的内存地址 ① 函数名就是函数的内存地址 def func(): pass >>>func <function ...