Spring AOP

1.什么是AOP

Aspect Orientied Programming 面向切面编程(面向方面编程) 它其实是对面向对象思想的一个扩展 它可以在不修改原有组件 源代码的情况下 给组件增强功能 AOP 关注重点是切面 通过配置手段就可以将切面嵌入到合适的位置 这样 能实现组件的重复利用 解除切面和目标组件之间的耦合度 大大提供程序的灵活性和可扩展性

2、AOP 中涉及到的概念

Aspect 切面 切面是用来封装共通业务逻辑的 用切面类型创建的对象叫切面对象 JoinPoint 连接点 要被加入共通业务的位置 一般封装了方法的信息 Pointcut 切点 切点是一堆连接点的集合

Target 目标 要被切入共通业务逻辑的组件

Proxy 代理 被增强之后的目标 叫代理

Advice 通知 通知是一种时机 目标方法调用开始之前 目标方法调用之后 目标方法调用前后 目标方法执行过程中一定执行 目标方法出现异常

切面 ------ 通知 ------- 切点

3、AOP 编程的实现步骤

3.1 建立一个项目 导入jar包(ioc aop) 拷贝配置文件到src下 建立一个服务类 里面定义两个方法 使用伪代码完成逻辑 使用Spring 容器创建 组件 并通过容器获取组件 调用方法

3.2 定义一个切面类 共通业务逻辑是 在方法调用前打印

3.3 在Spring 容器中创建切面对象 并且通过配置手段 将切面嵌入到方法调用位置 测试

4、切点表达式的写法

4.1bean 限定表达式 bean(符合条件的对象id) 如果符合对象的id 则对象对应的类型中对应 所有的方法都将切入共通逻辑 允许使用通配符 如 *Dao 既所有的以Dao 结尾的组件id 都将被匹配

4.2 类型限定表达式

within(符合条件的类型表达式) 这个表达式的最后一部分一定是类型

within(com.xdl.dao.XdlBankAccountDAOOracleImp) com.xdl.dao中的 XdlBankAccountDAOOracleImp类型中对应的所有方法 都将被切入共通业务逻辑 within(com.xdl.dao.*) com.xdl.dao中的 所有的类型中对应的所有方法 都将被切入共通业务逻辑 *

within(com.xdl..*) com.xdl 包下的类型 以及 子包下类型 都将被切入共通业务逻辑

4.3 方法限定表达式

execution(方法限定表达式) 方法限定表达式 包括 权限修饰 返回值类型 方法名(参数说明) throws 异常 其中 返回值类 方法名() 是必须的

5.Spring AOP 中五种通知类型

<aop:before 前置通知 在目标方法调用前调用

<aop:after 最终通知 在目标方法调用后 一定会调用

<aop:after-returing 后置通知 在目标方法调用后 调用 目标方法出现异常就不调用

<aop:after-throwing 异常通知 在目标方法出现异常时调用

<aop:around 环绕通知 在目标方法调用前后 都会调用

6.基于标注的AOP

7.1 建立一个项目 导入jar包(ioc aop) 拷贝配置文件到src下

7.2 开启组件扫描 <context:component-scan base-package="" />

7.3 写一个 DAO 接口 复用上午的

7.4 写一个DAO 的实现类 复用上午的

7.5 在DAO 实现类上加对应的标注 让其在容器中创建对象 测试

7.6 写一个切面组件 并在容器中创建对象

7.7 开启标注形式的 aop <aop:aspectj-autoproxy proxy-target-class="true" />

7.8 在切面类上加 把切面类 变成真正的切面的标注 @Aspect 在切面方法上加对应的通知标注 然后在标注中写切点表达式

7.Spring 中的通知对应的标注

<aop:before 前置通知 在目标方法调用前调用 @Before

<aop:after 最终通知 在目标方法调用后 一定会调用 @After

<aop:after-returning 后置通知 在目标方法调用后 调用 目标方法出现异常就不调用 @AfterReturning

<aop:after-throwing 异常通知 在目标方法出现异常时调用 @AfterThrowing

<aop:around 环绕通知 在目标方法调用前后 都会调用 @Around

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容