14Spring_AOP编程(AspectJ)_环绕通知
在目标方法执行前后,进行代码增强 (阻止目标方法的执行 )
环绕通知实现任何通知效果。
案例如下:
案例结构:
aaarticlea/png;base64,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" alt="" />
第一步:编写代理类。
MyAspect.java
//这里必须要抛异常
public Object around( ProceedingJoinPoint proceedingJoinPoint) throws Throwable
{
System.out.print("环绕通知 方法前执行");
Object result=proceedingJoinPoint.proceed();
System.out.print("环绕通知 方法后执行");
return result; }
第二步:写ApplicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<bean id="OrderService" class="cn.itcast.spring.c_aop.impl.OrderServiceimpl" /> <!-- AspectJ AOP -->
<!-- 配置目标 -->
<bean id="CustomerService" class="cn.itcast.spring.d_aspectj.CustomerService"></bean>
<!-- 配置切面类 -->
<bean id="MyAspect" class="cn.itcast.spring.d_aspectj.MyAspect"></bean>
<aop:config>
<!-- ref引用切面类 -->
<aop:aspect ref="MyAspect"> <aop:pointcut expression="execution(* cn.itcast.spring.d_aspectj.CustomerService.*(..))" id="mypointcut2"/> <aop:around method="around" pointcut-ref="mypointcut2"/> </aop:aspect> </aop:config> </beans>
第三步 写Junit测试的代码:
@Test
public void testaround()
{ customerService.delete(); }
第四步 输出结果:
环绕通知 方法前执行
this is delete
环绕通知 方法后执行
14Spring_AOP编程(AspectJ)_环绕通知的更多相关文章
- 12Spring_AOP编程(AspectJ)_前置通知
接下里的博客会一篇一篇的讲解每一个通知.其实AOP_AspectJ的编程与传统的AOP的编程的最大的区别就是写一个Aspect 支持多个Advice和多个PointCut .而且我们写AOP_Aspc ...
- 16Spring_AOP编程(AspectJ)_最终通知
- 13Spring_AOP编程(AspectJ)_后置通知
后置通知和前置通知差不多.最大的特点是因为后置通知是运行在目标方法之后的,所以他可以拿到目标方法的运行的结果. 给出案例: 案例结构图:
- 15Spring_AOP编程(AspectJ)_抛出通知
- 11Spring_AOP编程(AspectJ)_概述
AspectJ 是一个框架 (第三方AOP框架 ),提供切面编程 ,编写一个Aspect 支持多个Advice和多个PointCut .对比前一种提到的传统的Aop编程,AspctJ更加的常用.Asp ...
- 19Spring_AOP编程(AspectJ)_使用@Pointcut注解来定义切点
我们之前的方式是采用 @AfterReturning(value="execution(* com.guigu.shen.anotion.UserDaoImpl.*(..))",r ...
- spring框架应用系列四:切面编程(环绕通知与前后置通知区别)
切面编程(环绕通知与前后置通知区别) 本文系作者原创,转载请注明出处:http://www.cnblogs.com/further-further-further/p/7867034.html 解决问 ...
- AOP 环绕通知 (Schema-base方式) 和 AspectJ方式在通知中获取切点的参数
环绕通知(Schema- base方式) 1.把前置通知和后置通知都写到一个通知中,组成了环绕通知 2.实现步骤: 2.1 新建一个类实现 MethodInterceptor 接口 public cl ...
- 18Spring_AOP编程(AspectJ)_AspectJ的各种通知总结
小结: 前置通知(权限控制). 后置通知 ---- 不怎么用 环绕通知(权限控制. 性能监控. 缓存技术 ) 异常通知 (发生异常后, 记录错误日志 ) 最终通知 (释放资源 ) 环绕通知 是取代任何 ...
随机推荐
- Google可能会用苹果的Swift 为什么?
Google可能会用苹果的Swift 为什么? 2014 年夏天,苹果在 WWDC 大会上宣布了全新的程序语言 Swift,主要用来开发 iOS 与 OSX 应用. 去年年底,苹果将 Swift 开源 ...
- iOS 核心动画
核心动画(Core Animation) : •CoreAnimation是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍,使用它需要先添加QuartzCore.fr ...
- 解压缩框架--SSZipArchive
下载地址:https://github.com/ZipArchive/ZipArchive 如果你直接将框架文件夹拖入项目,构建时会出现以下错误 解决方案: 点击+以后会弹出 如果使用cocoaPod ...
- Xcode找Library位置
- python 格式化字符串的三种方法
1)%格式化方法 >>> a = "this is %s %s" % ("my", "apple") >>&g ...
- 响应式Web设计 – 布局
写在前面 去年上半年,我开始着手推动项目中响应式设计的落地.以官网优化需求为契机,主动去做了响应式的页面设计,也说服了产品.设计和开发的相关同事一起把它上线落实,但不幸的是,由于各种方面的原因,比如, ...
- maven 错误No goals have been specified for this build. You must specify a valid lifecycle phase or a goal in the format
[INFO] Scanning for projects... [INFO] ------------------------------------------------------------- ...
- Swift 2.0初探
转眼间,Swift已经一岁多了,这门新鲜.语法时尚.类型安全.执行速度更快的语言已经渐渐的深入广大开发者的心. 今年6月,一年一度的WWDC大会如期而至,在大会上Apple发布了Swift 2.0,引 ...
- Effective Java 08 Obey the general contract when overriding equals
When it's the case that each instance of the class is equal to only itself. 1. Each instance of the ...
- nodejs创建一个HTTP服务器 简单入门级
const http = require('http');//请求http.createServer(function(request, response){ /*createServer该函数 ...