文档章节

AOP切面编程二

scooplol
 scooplol
发布于 2017/08/12 18:26
字数 397
阅读 4
收藏 0

一、前置通知递参数

1.修改前置通知接收参数选项

public void beforeInvoke(Object arg){
     Logger.getLogger(ServiceProxy.class).info("[ServiceProxy - Before] 参数值 "+arg); 
    }

2.修改applicationContext 调用表达式和前置通知参数接收

 <!-- 针对AOP的处理进行配置 -->
<aop:config>
     <!-- 定义业务操作切入点 -->
   <aop:pointcut expression="execution(* group.esperanto.service..*.*(..)) and args(id)" id="messagePoint"/>
        <!-- 定义具体操作到切入点的方法上 -->
   <aop:aspect ref="serviceProxy">
       <aop:before method="beforeInvoke" pointcut-ref="messagePoint" arg-names="id"/>
       <aop:after method="afterInvoke" pointcut="execution(* group.esperanto.service..*.*(..))"/>
   </aop:aspect>
</aop:config>

二、返回通知

1.添加返回通知处理方法

public void returnInvoke(Object val){
    	 Logger.getLogger(ServiceProxy.class).info("[ServiceProxy - Returning] 返回值 "+val); 
     }

2.修改applicationContext 添加返回通知

<!-- 针对AOP的处理进行配置 -->
<aop:config>
        <!-- 定义业务操作切入点 -->
  <aop:pointcut expression="execution(* group.esperanto.service..*.*(..)) and args(id)" id="messagePoint"/>
        <!-- 定义具体操作到切入点的方法上 -->
  <aop:aspect ref="serviceProxy">
    <aop:before method="beforeInvoke" pointcut-ref="messagePoint" arg-names="id"/>
    <aop:after method="afterInvoke" pointcut="execution(* group.esperanto.service..*.*(..))"/>
    <aop:after-returning method="returnInvoke" pointcut="execution(* group.esperanto.service..*.*(..))" returning="val" arg-names="val" />
  </aop:aspect>
</aop:config>

三、环绕通知

1.添加环绕通知执行方法

public Object arroundInvoke(ProceedingJoinPoint point) throws Throwable{
    	 Logger.getLogger(ServiceProxy.class).info("[ServiceProxy -arroundInvoke Before] 参数 值 "+ Arrays.toString(point.getArgs())); 
           // Object obj = point.proceed(point.getArgs());  // 正常继续传递参数
    	 Object obj = point.proceed(new Object[]{"hello"});   //现在不传递参数,自定义参数传递
    	 Logger.getLogger(ServiceProxy.class).info("[ServiceProxy -arroundInvoke After] 返回结果"+obj); 
    	 return true;
     }

2.修改applicationContext

 <!-- 针对AOP的处理进行配置 -->
<aop:config>
        <!-- 定义业务操作切入点 -->
  <aop:pointcut expression="execution(* group.esperanto.service..*.*(..))" id="messagePoint"/>
     <!-- 定义具体操作到切入点的方法上 -->
  <aop:aspect ref="serviceProxy">
     <aop:around method="arroundInvoke" pointcut-ref="messagePoint"/>
  </aop:aspect>
</aop:config>

 

© 著作权归作者所有

上一篇: AOP切面编程三
下一篇: AOP切面编程一
scooplol
粉丝 16
博文 103
码字总数 205785
作品 0
南充
程序员
私信 提问
spring aop , tx

一 .面向切面编程(AOP)的基础概念: 以一个普通的java方法来举例 a. 横切关注点:如上面5个通知的位置,在java对象中,可以这些具有类似共同处理逻辑的位置加入如权限验证、事物处理、日志记...

SKYCOBS
2016/08/18
13
0
SSM 五:Spring核心概念

第五章:Spring核心概念 一.Spring Ioc 优点:1.低侵入式设计2.独立于各种应用服务器3.依赖注入特性将组建关系透明化,降低耦合度4.面向切面编程的特性允许将通用性任务集中式处理5:使用第三...

廉价香水
2017/10/25
0
0
Spring AOP解释及在项目中使用举例

一.AOP是什么 AOP - Aspect Oriented Programing,面向切面编程。将封装好的对象切开,找出其中对多个对象产生影响的公共行为,并将其封装为一个可重用的模块,这个模块被命名为“切面”,切...

Jacktanger
2018/06/08
0
0
Spring架构揭秘-AOP

1、AOP概述 2、Spring AOP原理 3、Spring AOP架构解析 一、AOP概述 Java程序员在写代码的时候通常都是使用新建对象类来描述业务特性,然后通过对象的继承、组合、扩展等手段来实现业务需求,...

sgkbkega
2016/09/08
25
0
实例讲解Java的Spring框架中的AOP实现

简介 面向切面编程(AOP)提供另外一种角度来思考程序结构,通过这种方式弥补了面向对象编程(OOP)的不足。 除了类(classes)以外,AOP提供了 切面。切面对关注点进行模块化,例如横切多个...

清城北苑
2016/10/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring系列教程八: Spring实现事务的两种方式

一、 Spring事务概念: 事务是一系列的动作,它们综合在一起才是一个完整的工作单元,这些动作必须全部完成,如果有一个失败的话,那么事务就会回滚到最开始的状态,仿佛什么都没发生过一样。...

我叫小糖主
57分钟前
4
0
CentOS 的基本使用

1. 使用 sudo 命令, 可以以 root 身份执行命令, 必须要在 /etc/sudoers 中定义普通用户 2. 设置 阿里云 yum 镜像, 参考 https://opsx.alibaba.com/mirror # 备份mv /etc/yum.repos.d/CentO...

北漂的我
昨天
2
0
Proxmox VE技巧 移除PVE “没有有效订阅” 的弹窗提示

登陆的时候提示没有有效的订阅You do not have a valid subscription for this server. Please visit www.proxmox.com to get a list of available options. 用的是免费版的,所以每次都提示......

以谁为师
昨天
3
0
Java设计模式之外观模式(门面模式)

什么是外观模式   外观模式(Facade),他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构性模式。为子系统中的一组接口提供了一个统一的访问接口...

须臾之余
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部