关于 spring-aop理解
对于Aop 一直理解很是不到位 谈谈自己理解!
Aop :
Aspect: 切面 joinpoint 连接点 pointCut 切点 Advice 增强 targert 目标对象 weaving 织入 introduction等组成
理解几个关键字:
采用springboot 方式来快速实现的理解:
故事:月黑风高杀人夜,一个人作案,但是被一个老王看见了 ,由于天气原因老王只看见是一个男的 高175公分,公安局要将10个175 男性抓起来,进行审问。
pointCut:切点
所谓的切点:男 175 可以理解为是对我们要对哪些方法进行增强的描述,好比我们买烟 对要买哪一类的描述
代码体现在:* com.lwd.web.controller.*.*(..) 这里就是切点的描述 说任意类型的 com.lwd.web.controller 任意方法 任意参数的 最终说明了要增强的是哪一类方法
@PointCut("execution(* com.lwd.web.controller.*.*(..))")
public void say(){}
joinpoint 连接点
连接点:是一个比较更抽象的概念。 10 个人中每一个具体的人 也就是代码执行过程中具体的增强方法 具体的public com.lwd.web.controller.eat(){} 这个方法
Advice 增强 审讯的动作
before after afterreturning round 等五种增强
增强就是将对切点描述的方法 新增加执行的代码
@Aspect
public class Aspect{ @PointCut("execution(* com.lwd.web.controller.*.*(..))")
public void say(){} @before("say")
public void sayeat(){
新的代码
} }
Aspecct 切面 故事加起来
那么什么是切面:个人理解 切面就是如果我们要对一个方法要进行增强 (增强:增加这个方法功能) 又不想改变原有方法 虽然我们可以采用代理的方式,aop本身就是动态代理实现 我们要如何将我们写的代码和原有的方法结合起来,我们写的增强代码放在那里 在什么时间增强这个代码 定义的这个切面类就是对上面啰嗦的抽象出来的类。也是上面 joinpoint + pointcut + advice 所有构成了切面
@Aspect
public class AopAspect(){ }
在使用aop 的时候我们通常会通过joinpoint 连接点获取增强方法信息
joinpoint 提供了
getArgs() 获取连接点方法运行时的入参列表
getSignature() 获取连接点方法签名对象 方法信息
getTarget() 获取连接点所在的目标对象 方法所在类的对象
getThis() 获取代理对象本身 代理对象
proceedingJoinpoint
继承了joinpoint 新增了两个接口
proceed() 通过反射执行目标对象的连接点出方法
proceed(Objecct [] args ) 通过翻身执行目标对象连接点处的方法
不过使用新的入参替换原来的入参
关于 spring-aop理解的更多相关文章
- spring AOP理解和相关术语
一.AOP理解 AOP:横向抽取机制,底层使用代理方式实现. 示例: 现有LogDAO接口以及实现Log接口的Log类.类有add的方法,现在要打印add方法的开始时间和结束时间.(即增强Log的ad ...
- spring aop 理解
aop简介 aop是spring 的两大特性之一,还有IOC.主要提供面向切面的编程思想,区分于面向对象编程. aop原理(动态代理+反射) 在一个方法体中,可能会存在很多其他的方法调用,我们可以把每 ...
- Spring AOP理解
Spring的核心思想的IOC和AOP.最近学习AOP,对切面的学习有了进一步的认识. Spring用代理类包裹切面,把他们织入到Spring管理的bean中.也就是说代理类伪装成目标类,它会截取对目 ...
- Spring aop 原始的工作原理的理解
理解完aop的名词解释,继续学习spring aop的工作原理. 首先明确aop到底是什么东西?又如何不违单一原则并实现交叉处理呢? 如果对它的认识只停留在面向切面编程,那就脏了.从oop(Objec ...
- 正确理解Spring AOP中的Around advice
Spring AOP中,有Before advice和After advice,这两个advice从字面上就可以很容易理解,但是Around advice就有点麻烦了. 乍一看好像是Before ad ...
- 我所理解的Spring AOP的基本概念
Spring AOP中的概念晦涩难懂,读官方文档更是像读天书,看了非常多样例后,写一些自己理解的一些spring的概念.要理解面向切面编程,要首先理解代理模式和动态代理模式. 如果一个OA系统中的一个 ...
- 深入理解Spring AOP之二代理对象生成
深入理解Spring AOP之二代理对象生成 spring代理对象 上一篇博客中讲到了Spring的一些基本概念和初步讲了实现方法,当中提到了动态代理技术,包含JDK动态代理技术和Cglib动态代理 ...
- 简单直白的去理解AOP,了解Spring AOP,使用 @AspectJ - 读书笔记
AOP = Aspect Oriental Programing 面向切面编程 文章里不讲AOP术语,什么连接点.切点.切面什么的,这玩意太绕,记不住也罢.旨在以简单.直白的方式理解AOP,理解Sp ...
- Spring Aop的理解和简单实现
1.AOP概念 所说的面向切面编程其实就是在处理一系列业务逻辑的时候这一系列动作看成一个动作集合.比如连接数据库来说: 加载驱动-----获取class--------获取连接对象-------访问数 ...
- Spring AOP深入理解之拦截器调用
Spring AOP深入理解之拦截器调用 Spring AOP代理对象生成回想 上一篇博客中:深入理解Spring AOP之二代理对象生成介绍了Spring代理对象是怎样生成的,当中重点介绍了JDK动 ...
随机推荐
- MySQL学习(四)查询
一.group_concat()函数.把groupby的分组中字段数据组合显示出来 select s_id , GROUP_CONCAT(要显示的字段名) from table group by 分 ...
- Object c的NSString的使用,创建,拼接和分隔,子string,substring
main: // // main.m // StringDemo // // Created by 千 on 16/9/22. // Copyright © 2016年 kodulf. All ...
- 2017.9.5 Java知识点总结
1.*程序的数据操作往往都在内存中操作的,也就是说数据运算都在内存中完成. 2.*什么是变量? --变量就是内存中的一块用来存放数据的存储单元. --变量中的值可变 --我们通过变量名就可以找到内存中 ...
- py faster rcnn+ 1080Ti+cudnn5.0
看了py-faster-rcnn上的issue,原来大家都遇到各种问题. 我要好好琢磨一下,看看到底怎么样才能更好地把GPU卡发挥出来.最近真是和GPU卡较上劲了. 上午解决了g++的问题不是. 然后 ...
- Java笔试--代码纠错
package practice.javase; public abstract class Name { private String name; public abstract boolean i ...
- oracle中lock和latch的用途
本文向各位阐述Oracle的Latch机制,Latch,用金山词霸翻译是门插栓,闭锁,专业术语叫锁存器,我开始接触时就不大明白为什么不写Lock,不都是锁吗?只是翻译不同而以?研究过后才知道两者有很大 ...
- c# TCP高性能通信
开篇都是吹牛逼哈... 我原本打算使用dotnetty来解决传输问题,但是试了下没有成功,也没有找到相关问题解决方法,导出源码,好大啊.暂时不想研究,而且是.Net Core的.最后没有办法,就自己封 ...
- c# 任务超时执行组件
最近整理下各类框架,学习一下欠缺的东西.因为前一年开发过java服务端,知道java有很多开源框架,但是毕竟起来也很累. 现在转回头从新审视c#,很基础,没有开源框架,因为以前它不开源,所以少,不用比 ...
- django写一个简单的登陆注册
要写这个,前提还是需要知道三个知识: 一个是urls.py,它是写我们的路由关系的,之前我写了通过wsgiref写一个简单的服务端,也用到了路由,就是 请求过来的url和视图函数的对应关系. 二是就是 ...
- Linux性能监控工具 gtop
给大家介绍一款性能监控工具,个人对比界面比top美观,常用指标比较清晰毕竟top上的指标不是每个人都能熟悉,也不是所有指标参数都需要看,对于新手也不便查找,好了说的再多先上图大家参观一下. 1.安装需 ...