Spring AOP 随记
本周经历各种面试失败后,最后一站张建飞老大的阿里,感觉有着这般年纪不该有的垃圾履历而忧伤中,不过还是要继续加油的,毕竟他说的好,都是经历,无愧初心。
所以为了更加深入理解Spring AOP我又翻起了我17买的那本Spring4出来看了。面试被问到起嘛我基础还是有的对吧。
AOP和OOP:
编程范式,我们都知道有些面函数式编程,面向对象编程,而面向切面编程其实也就同他们差不多,所以面试官问的时候第一件事就是介绍AOP是什么吧,我觉得这样说是最好的,它就是一种编程范式而已!而函数哲学很多,比喻什么副作用啊,面向映射,而面向命令编程就侧重于解决问题步骤等等;大家最熟悉的应该就是面向对象编程,一针到底就是:面向对象编程等都是解决业务逻辑,是垂直领域的问题,而面向切面编程,就是解决横切的问题。我解析不清楚,但面试问了我暂时只会答这些。
连接点(JoinPoint):
其实Spring的AOP也就两种实现方式,一个是JDK的动态代理技术,另一种就是CGLibs,JDK动态代理只带在方法级别前后进行横切,当然还有异常抛出,而且必须是要求被代理的类是实现了借口的,因为JDK动态代理技术的硬性要求,必须需要接口为参数生成代理类,主要用到两个类,一个是InvocationHandler接口,一个是Proxy类,具体我后面贴出;另外一个就是CGLibs的字节码生成技术了,这个可以在类级别进行子类生产产生动态代理的方式;因此这个方法不能用在final类上。那么这个和连接点有什么关系呢?连接点由两个信息确定,一是用方法表示的程序执行点,二是用相对位置所表示的方位,而任何被感兴趣的连接点就是切点。
切点(Point Cut):
连接点这个概念告诉了我们一个类中可以被横切的候选点,而切点,就是我们某个横切逻辑需要、或者说感兴趣的点了;书中提到,用数据库记录比喻连接点,而用SQL语句表示切点最好了;因为切点,而挑选出了合适的连接点。
增强(Advice):
使用增强类定义横切逻辑,同时由于Spring只支持方法连接点,增强类还包括在方法的哪一点加入横切代码的方位信息,所以增强既包含横切逻辑,又包含部分连接点信息。其中增强类型就可以概括为:前置增强、后置增强、环绕增强、异常增强、引介增强。
切面(Aspect):
类是对物体特征的抽象,切面就是对横切关注点的抽象,由切点和增强组成
织入(Weave):
将切面应用到目标对象并导致代理对象创建的过程
引介(introduction):
在不修改代码的前提下,引入可以在运行期为类动态地添加一些方法或字段
Spring AOP 随记的更多相关文章
- spring aop使用
最近做一个数据库分离的功能,其中用到了spring aop,主要思路就是在service层的方法执行前根据注解(当然也可以根据方法名称,如果方法名称写的比较统一的话)来判断具体使用哪个库.所以想着再回 ...
- Spring AOP AspectJ
本文讲述使用AspectJ框架实现Spring AOP. 再重复一下Spring AOP中的三个概念, Advice:向程序内部注入的代码. Pointcut:注入Advice的位置,切入点,一般为某 ...
- Spring 学习——Spring AOP——AOP配置篇Advice(有参数传递)
声明通知Advice 配置方式(以前置通知为例子) 方式一 <aop:config> <aop:aspect id="ikAspectAop" ref=" ...
- 简单直白的去理解AOP,了解Spring AOP,使用 @AspectJ - 读书笔记
AOP = Aspect Oriental Programing 面向切面编程 文章里不讲AOP术语,什么连接点.切点.切面什么的,这玩意太绕,记不住也罢.旨在以简单.直白的方式理解AOP,理解Sp ...
- 浅析Spring AOP
在正常的业务流程中,往往存在着一些业务逻辑,例如安全审计.日志管理,它们存在于每一个业务中,然而却和实际的业务逻辑没有太强的关联关系. 图1 这些逻辑我们称为横切逻辑.如果把横切的逻辑代码写在业务代码 ...
- Spring aop 简单示例
简单的记录一下spring aop的一个示例 基于两种配置方式: 基于xml配置 基于注解配置 这个例子是模拟对数据库的更改操作添加事物 其实并没有添加,只是简单的输出了一下记录 首先看下整个例子的目 ...
- Hibernate 延迟加载的代理模式 和 Spring AOP的代理模式
Hibernate 延迟加载的代理模式 和 Spring AOP的代理模式 主题 概念 Hibernate 延迟加载的代理模式 Spring AOP的代理模式 区别和联系 静态代理和动态代理 概念 代 ...
- spring AOP详解〇
AOP正在成为软件开发的下一个圣杯.使用AOP,你可以将处理aspect的代码注入主程序,通常主程序的主要目的并不在于处理这些aspect.AOP可以防止代码混乱. 为了理解AOP如何做到这点,考虑一 ...
- Spring入门(十):Spring AOP使用讲解
1. 什么是AOP? AOP是Aspect Oriented Programming的缩写,意思是:面向切面编程,它是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. 可以认为AOP是 ...
随机推荐
- ubuntu16.04 npm安装
$ sudo apt-get install python-software-properties $ curl -sL https://deb.nodesource.com/setup_6.x | ...
- laravel实战化项目之三板斧
laravel实战化项目之三板斧 spring mvc 实战化项目之三板斧 asp.net mvc 实战化项目之三板斧 laravel是我工作10多年来见到的真正能称得上让phper从面条一样杂乱的代 ...
- 在Ubuntu18.04下配置hadoop集群
服务器准备 启动hadoop最小集群的典型配置是3台服务器, 一台作为Master, NameNode, 两台作为Slave, DataNode. 操作系统使用的Ubuntu18.04 Server, ...
- RobotFrameWork编写接口测试及如何断言
1. 前言 本篇是第一系列(Http接口自动化)的第五课程,如果对系列课程大纲不清楚的,可以查看<RobotFramework系列免费课程-开课了~>. 前面我们介绍了,在真正实施前,需先 ...
- iOS--App功耗优化
良好的用户体验需要如下要素: 电池寿命长.随着能效降低,电池寿命也会降低.但用户想让自己的移动设备全天候待命. 速度快.iOS系统处理复杂操作时仍能提供很好的性能. 响应快.同一时刻消耗太多资源会使U ...
- Mybatis(三) 映射文件详解
前面说了全局配置文件中内容的详解,大家应该清楚了,现在来说说这映射文件,这章就对输入映射.输出映射.动态sql这几个知识点进行说明,其中高级映射(一对一,一对多,多对多映射)在下一章进行说明. 一.输 ...
- fiddler 对https支持
https://www.cnblogs.com/joshua317/p/8670923.html 测试可行
- Linux下源码安装xz的方法
xz是一个不太常见但又效率非常高的解压缩软件,安装方法如下 ,cd /usr/local/src ,wget https://tukaani.org/xz/xz-5.2.3.tar.gz //下载到/ ...
- pilicat-dfs 霹雳猫-分布式文件系统
pilicat-dfs 霹雳猫-分布式文件系统 一种可以将网站图片或上传的文件,进行分布式存放的服务,可自动复制到多台物理机器,可满足高可用和负载均衡 已编译好的程序包 http://git.osch ...
- Python2.x与3.x版本区别
Python2.x与3.x版本区别 1.print 函数 print语句没有了,取而代之的是print()函数. Python 2.6与Python 2.7部分地支持这种形式的print语法.在Pyt ...