对于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理解的更多相关文章

  1. spring AOP理解和相关术语

    一.AOP理解 AOP:横向抽取机制,底层使用代理方式实现. 示例: 现有LogDAO接口以及实现Log接口的Log类.类有add的方法,现在要打印add方法的开始时间和结束时间.(即增强Log的ad ...

  2. spring aop 理解

    aop简介 aop是spring 的两大特性之一,还有IOC.主要提供面向切面的编程思想,区分于面向对象编程. aop原理(动态代理+反射) 在一个方法体中,可能会存在很多其他的方法调用,我们可以把每 ...

  3. Spring AOP理解

    Spring的核心思想的IOC和AOP.最近学习AOP,对切面的学习有了进一步的认识. Spring用代理类包裹切面,把他们织入到Spring管理的bean中.也就是说代理类伪装成目标类,它会截取对目 ...

  4. Spring aop 原始的工作原理的理解

    理解完aop的名词解释,继续学习spring aop的工作原理. 首先明确aop到底是什么东西?又如何不违单一原则并实现交叉处理呢? 如果对它的认识只停留在面向切面编程,那就脏了.从oop(Objec ...

  5. 正确理解Spring AOP中的Around advice

    Spring AOP中,有Before advice和After advice,这两个advice从字面上就可以很容易理解,但是Around advice就有点麻烦了. 乍一看好像是Before ad ...

  6. 我所理解的Spring AOP的基本概念

    Spring AOP中的概念晦涩难懂,读官方文档更是像读天书,看了非常多样例后,写一些自己理解的一些spring的概念.要理解面向切面编程,要首先理解代理模式和动态代理模式. 如果一个OA系统中的一个 ...

  7. 深入理解Spring AOP之二代理对象生成

    深入理解Spring AOP之二代理对象生成 spring代理对象 上一篇博客中讲到了Spring的一些基本概念和初步讲了实现方法,当中提到了动态代理技术,包含JDK动态代理技术和Cglib动态代理 ...

  8. 简单直白的去理解AOP,了解Spring AOP,使用 @AspectJ - 读书笔记

    AOP = Aspect Oriental Programing  面向切面编程 文章里不讲AOP术语,什么连接点.切点.切面什么的,这玩意太绕,记不住也罢.旨在以简单.直白的方式理解AOP,理解Sp ...

  9. Spring Aop的理解和简单实现

    1.AOP概念 所说的面向切面编程其实就是在处理一系列业务逻辑的时候这一系列动作看成一个动作集合.比如连接数据库来说: 加载驱动-----获取class--------获取连接对象-------访问数 ...

  10. Spring AOP深入理解之拦截器调用

    Spring AOP深入理解之拦截器调用 Spring AOP代理对象生成回想 上一篇博客中:深入理解Spring AOP之二代理对象生成介绍了Spring代理对象是怎样生成的,当中重点介绍了JDK动 ...

随机推荐

  1. Python语言程序设计基础(3)—— 基本数据类型

    天天向上 dayup,dayfactor = 1.0,0.01 for i in range(365): if i % 7 in [6,0]: dayup = dayup*(1-dayfactor) ...

  2. 行高 line-height

    一.行高的定义 line-height(行高):两行文字基线之间的距离 1.什么是基线? 2.为何是基线? 3.需要两行吗? 1.什么是基线? 我们上学的时候都用过,抄写英文字母的时候.其中有一条红线 ...

  3. webstorm识别php代码

    在 setting --editor--filetype---找到html 在下面的框里点右边加好,添加*.php

  4. hadoop二次排序

    import java.io.DataInput; import java.io.DataOutput; import java.io.File; import java.io.IOException ...

  5. MarkDown/Html在线转换(支持代码高亮,可复制到微信公众号、今日头条)

    MarkDown/Html在线转换能够将md渲染成html并且能保持代码高亮,可以方便的复制待格式的html粘贴到微信公众号,CSDN,简书,博客园,开源中国等. 扫码体验在线助手小程序 我是java ...

  6. multimap的使用

    multimap由于允许有重复的元素,所以元素插入.删除.查找都与map不同. 插入insert(pair<a,b>(value1,value2)) #include <iostre ...

  7. POJ 1180 Batch Scheduling (dp,双端队列)

    #include <iostream> using namespace std; + ; int S, N; int T[MAX_N], F[MAX_N]; int sum_F[MAX_N ...

  8. HTTP头部信息解释分析

    HTTP 头部解释 1. Accept:告诉WEB服务器自己接受什么介质类型,*/* 表示任何类型,type/* 表示该类型下的所有子类型,type/sub-type. 2. Accept-Chars ...

  9. 【ospf-vlink虚拟连接】

    根据项目需求,搭建好如下拓扑图 配置rt1的环回 口地址及g0/0/0的ip地址 配置rt1的ospf 配置rt2的环回口地址和g0/0/1及g0/0/0的ip地址 \ 配置rt2的ospf 同理,配 ...

  10. Linux Shell常用命令(长期更新)

    #判断某个字段是否匹配指定值 awk -F"," '{if($4=="value"){print $1} else {print $0}}' file.txt ...