如果你没有源码,不能为通知类添加注解,又不想将AspectJ注解放入到你的代码中,必须选择XML配置了。

  1、Spring XML配置文件

  解析参考:http://www.cnblogs.com/bigbigbigo/articles/8375530.html

  2、AOP配置元素

aop配置元素 描述
<aop:advisor> 定义aop通知器
<aop:after> 定义aop后置通知(不管被通知的方法是否执行成功)
<aop:after-returning> 定义aop after-returning通知
<aop:after-throwing> 定义aop after-throwing通知
<aop:around> 定义aop环绕通知
<aop:aspect> 定义切面
<aop:aspect-autoproxy> 启动@AspectJ注解驱动的切面
<aop:before> 定义aop前置通知
<aop:config> 顶层的aop配置元素,大多数的<aop:*>元素必须包含在<aop:config>内
<aop:declare-parents> 为被通知的 对象引入的额外的接口,并透明地实现
<aop:pointcut> 定义切点

  

  3、声明前置通知和后置通知

    <aop:config>
<aop:aspect ref="audience">
<aop:before
pointcut="execution(** concert.Performance.perform(..))"
method="silenceCellPhone"/> <aop:before
pointcut="execution(** concert.Performance.perform(..))"
method="takeSeats"/> <aop:before
pointcut="execution(** concert.Performance.perform(..))"
method="applause"/> <aop:before
pointcut="execution(** concert.Performance.perform(..))"
method="demandRefund"/> </aop:aspect>
</aop:config>

  使用<aop:pointcut>元素更简洁:

<aop:config>
<aop:aspect ref="audience">
<aop:pointcut id="performance" expression="execution(** concert.Performance.perform(..))"/>
<aop:before
pointcut-ref="performance"
method="silenceCellPhones"/> <aop:before
pointcut-ref="performance"
method="takeSeats"/> <aop:before
pointcut-ref="performance"
method="applause"/> <aop:before
pointcut-ref="performance"
method="demandRefund"/> </aop:aspect>
</aop:config>

  

  4、声明环绕通知

    <aop:config>

        <!--声明环绕通知-->
<aop:aspect ref="audienceAround">
<aop:pointcut id="performance" expression="execution(** concert.Performance.perform(..))"/>
<aop:around pointcut-ref="performance" method="watchPerformance"/>
</aop:aspect> </aop:config>

  5、为通知传递参数

  假设方法perform(int numbers)有一个int型参数,而这个参数会传递到通知方法中。

  因为在XML中,“&”符号会被解析为实体的开始,所以我们用“and”关键字代替“&&”。

<aop:config>
<aop:aspect ref="audience">
<aop:pointcut id="performance" expression="execution(** concert.Performance.perform(int)) and args(numbers)"/> <aop:before
pointcut-ref="performance"
method="demandRefund"/> </aop:aspect>
</aop:config>

  6、为对象引入新的方法(通过切面引入新的功能)

  之前通过使用@DeclareParents注解为被通知的对象引入新方法,但AOP因为不是AspecJ特有。

  在XML中使用<aop:declare-parents>,可以实现相同的功能。

<aop:aspect>
<aop:declare-parents types-matching="concert.Performance+"
implement-interface="concert.Encoreable"
default-impl="concert.DefaultEncorable"/>
</aop:aspect>

  这里使用default-impl属性来显示指定Encoreable的实现。

  我们还可以使用delegate-ref属性来引用一个Spring bean作为引入的委托,这需要在Spring上下文中存在一个ID为encorableDelegate的bean:

<aop:aspect>
<aop:declare-parents types-matching="concert.Performance+"
implement-interface="concert.Encoreable"
default-ref="DefaultEncorable"/>
</aop:aspect>

  使用default-impl,叫直接标识委托;

  使用delegate-ref,叫引用一个bean作为引入的委托

Spring实战(十一) 在Spring XML中配置AOP的更多相关文章

  1. Spring学习记录(十三)---基于xml文件配置AOP

    上一篇讲了用注解配置AOP,现在讲用xml怎么配置AOP 其实逻辑是一样的,只是用xml的方法,要把这种逻辑写出来,告诉spring框架去执行. 例子:这里的例子和上一篇的例子一样.换成xml方式 / ...

  2. web.xml中配置Spring中applicationContext.xml的方式

    2011-11-08 16:29 web.xml中配置Spring中applicationContext.xml的方式 使用web.xml方式加载Spring时,获取Spring applicatio ...

  3. 源码跟读,Spring是如何解析和加载xml中配置的beans

    Spring版本基于: 跟踪代码源码基于: https://github.com/deng-cc/KeepLearning commit id:c009ce47bd19e1faf9e07f12086c ...

  4. [spring]Bean注入——在XML中配置

    Bean注入的方式有两种: 一.在XML中配置 属性注入 构造函数注入 工厂方法注入 二.使用注解的方式注入@Autowired,@Resource,@Required 本文首先讲解在XML中配置的注 ...

  5. spring 和springmvc 在 web.xml中的配置

    (1)问题:如何在Web项目中配置Spring的IoC容器? 答:如果需要在Web项目中使用Spring的IoC容器,可以在Web项目配置文件web.xml中做出如下配置: <!-- Sprin ...

  6. 10 Spring框架--基于注解和xml的配置的应用案例

    1.项目结构 2.基于xml配置的项目 <1>账户的业务层接口及其实现类 IAccountService.java package lucky.service; import lucky. ...

  7. struts2 在 Action 或 Interceptor 中获取 web.xml 中配置的 <context-param> 参数 (这是我的第一篇博文,哈哈。)

    最近为了改一个问题,想加一个控制开关,就在web.xml 中配置了一个 <context-param> 参数,并在 Action 或 Interceptor 中获取参数值. 1.在 web ...

  8. 在web.xml中配置监听器来控制ioc容器生命周期

    5.整合关键-在web.xml中配置监听器来控制ioc容器生命周期 原因: 1.配置的组件太多,需保障单实例 2.项目停止后,ioc容器也需要关掉,降低对内存资源的占用. 项目启动创建容器,项目停止销 ...

  9. 在web.xml中配置error-page

    在web.xml中配置error-page 在web.xml中有两种配置error-page的方法,一是通过错误码来配置,而是通过异常的类型来配置,分别举例如下: 一.   通过错误码来配置error ...

随机推荐

  1. 反省——关于csp-s模拟50

    本人于搜索csp-s模拟49题解时,有意识地点开了一篇关于csp-s模拟50T2的题解,并知道了题解是二维前缀和以及四维偏序. 更重要的是,那篇博客说有解法二,叫二维莫队. 于是我上网搜索二维莫队,结 ...

  2. python struct的使用例子

    import struct i = 1024 # s0为一个字符串,长度为4,即占四个字节,这样方便传输与保存二进制数据. s0 = struct.pack(">I", i) ...

  3. bypass disable_function总结学习

    通常bypass的思路如下 1. 攻击后端组件,寻找存在命令注入的.web 应用常用的后端组件,如,ImageMagick 的魔图漏洞.bash 的破壳漏洞 2. 寻找未禁用的漏网函数,常见的执行命令 ...

  4. vga转HDMI与hdmi转VGA区别

  5. ueditor 图片选区错位问题,图片无法正常缩放

    当编辑框高度固定可内部滚动时,ueditor插入图片调节框显示bug 在使用百度euditor的编辑器时,我们常常需要让用户对插入的图片进行拉伸修改大小.当euditor的编辑框不随内容的增加而调节高 ...

  6. matlab遍历文件夹下所有图片和遍历所有子文件夹下图片

    做图像处理实验,经常需要遍历当前文件下所有图片.matlab当然很早就考虑了这个问题,库函数dir就是完成这个工作的.函数返回的是一个存放所有目录下文件信息的结构体,通过遍历结构体就可以达到访问所有文 ...

  7. win10下检查nvidia显卡支持的cuda版本

    1.首先将[C:\Program Files\NVIDIA Corporation\NVSMI]添加至系统环境变量[path]中: 2.在powershell中使用命令[nvidia-smi],即可看 ...

  8. PackageUtils

    import android.content.Context; import android.content.Intent; import android.content.pm.Application ...

  9. C# 批处理制作静默安装程序包

    使用批处理+WinRAR制作静默安装程序包 @echo 安装完窗口会自动关闭!!! @echo off start /wait Lync.exe /Install /Silent start /wai ...

  10. ftp服务器不能上传文件故障

    1.在客户端lftp命令无法put文件 原因:登陆用户无法读写 ftp服务器的文件夹,在服务器上增加权限  chmod 777  即可 还有一种方法:在 vsftp的配置文件里,设置可匿名读写