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是 ...
随机推荐
- windows环境下面批量修改文件夹名称
ren 1 A ren 2 B ren 3 C ren 4 D 电脑桌面新建文档 ---> 批量修改文件夹名称.txt 修改文件名称为:--->批量修改文件夹名称.bat 内容如上: 双击 ...
- 3DES 加、解密
package com.suning.hrqz.utils; import java.io.UnsupportedEncodingException; import java.security.Mes ...
- Map network drive遇到报错“The network folder specified is currently mapped using a different user name and password”,怎么办?
--------------------------- Windows --------------------------- The network folder specified is curr ...
- BitBlt 函数 详解, StretchBlt、SetStretchBltMode、SetBrushOrgEx 按句柄截图、直接截取缩略图
BitBlt 该函数对指定的源设备环境区域中的像素进行位块(bit_block)转换,以传送到目标设备环境. 函数原型 [DllImport("gdi32.dll")] publi ...
- pm2启动jenkins不存在tty的问题
问题 使用pm2管理jenkins, 直接启动bash script, 运行一些命令时会遇到tty不存在的错误 child_process.js:120 p.open(fd); ^ Error: EN ...
- 用.NET开发的磁力搜索引擎——btbook.net
UPDATE:目前项目已停止维护,本文仅留作纪念. 去年10月份开始研究相关的协议与资料,中途乱七八糟的事情差点没坚持下来,寒假里修修补补上礼拜把Btbook发布了,经过社交网络的推广之后,上线第三天 ...
- Java 多线程重排序的探究
最近在看<Java 并发编程实战>,之前对所谓的线程的重排序一脸懵逼,今天终于有了点理解. 我们先来看下这个实例Demo /** * 线程的重排序问题 * **/ public class ...
- 使用DotfuscatorPro_4.9对软件dll库进行加密
点击settings选项,Disable String Encryption改成NO,具体里面的设置如下图. 再点击Rename选项下的options,左边的选项勾上,再把Renaming Schem ...
- [HDFS Manual] CH3 HDFS Commands Guide
HDFS Commands Guide HDFS Commands Guide 3.1概述 3.2 用户命令 3.2.1 classpath 3.2.2 dfs 3.2.3 envvars 3.2.4 ...
- halcon开发必读
关于HALCON的新手入门问题简答(1) 无论读入什么图像,读入图像显示效果明显和原始图像不一致,哪怕是从相机读入的图像,也是明显颜色差异.什么原因引起? 答:初步诊断是,显示的时候调用的颜色查找表存 ...