博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
六、面向切面的spring(2)
阅读量:5084 次
发布时间:2019-06-13

本文共 3054 字,大约阅读时间需要 10 分钟。

  这个是承接五的,这部分主要的内容是在XML中声明切面。

一、在XML中声明切面

让我们先看一下spring中的AOP配置元素有哪些:

AOP配置元素 用途
<aop:advisor> 定义AOP通知器
<aop:after> 定义AOP后置通知(不管被通知的方法是否成功)
<aop:after-returning> 定义AOP返回通知
<aop:around> 定义AOP环绕通知
<aop:aspect> 定义一个切面
<aop:aspectj-autoproxy> 启用@AspectJ注解驱动切面
<aop:before> 定义一个
<aop:config> 顶层的AOP配置元素,大多数的
<aop:declare-parents> 以透明的方式为被通知的对象引入额外的接口
<aop:pointcut> 定义一个切点

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1 //声明的Audience类 2 package concert; 3 public class Audience { 4   public void silenceCellPhones(){ 5     System.out.println("Silence cell phones"); 6   } 7    8   public void takeSeats(){ 9     System.out.println("Taking seats");10   }11   12    public void applause(){13     System.out.println("CLAP CLAP CLAP!!!");14   }15 16    public void demadRefund(){17     System.out.println("Demanding a refund");18   }19 }

1、声明前置和后置通知

通过XML方式将无注解的Audience声明为切面

1  
2 //引用audience bean 3
4
7 8
11 12
15 16
19
20
21 22 //使用
定义命名切点23
24 //引用audience bean25
26
30
33 34
37 38
41 42
45
46

2、声明环绕通知

1 package concert; 2 import org.aspectj.lang.PreceedingJoinPoint; 3  4 public class Audience{ 5   public void watchPerformance(PreceedingJoinPoint jp){ 6     try{ 7       System.out.println("Sliencing cell phones"); 8       System.out.println("Taking seats"); 9       jp.proceed();10       System.out.println("CLAP CLAP CLAP!!!");11     }catch(Throwable e){12       System.out.println("Demanding a refund");13     }14   }15 }16 17 //xml中配置环绕通知18 
19
20
21
22
23

3、为通知传递参数

//使用参数化的通知来记录磁道播放的次数package soundsystem;import java.util.HashMap;import java.util.Map;public class TrackCounter {  private Map
trackCounts = new HashMap
(); public void trackPlayed(int trackNumber) {} public void countTrack(int trackNumber){ int currentCount = getPlayCount(trackNumber); trackCounts.put(trackNumber, currentCount +1); } public int getPlayCount(int trackNumber){ return trackCounts.countainsKey(trackNumber) ? trackCounts.get(trackNumber) : 0; }}//在XML 中将TrackCounter配置为参数化的切面
空谷幽兰
爱情
此时此刻
灵岩
救赎之旅
心愿
逍遥行
喜悦
世外桃源
出离

注意:我们使用了前面相同的aop命名空间XML元素,它们会将POJO声明为切面。唯一的区别是切点表达式中包含了一个参数,这个参数会传递到通知的方法中。

4、通过切面引入新功能

<aop:declare-parents>声明了此切面所通知的bean要在它的对象层次结构拥有新的父类型。具体到本例中,类型匹配Performance接口(由types-matching属性指定)的那些bean在父类结构中会增加Encoreable接口(由implement-interface属性指定)。

二、注入Aspect切面

当springAOP不能满足需求时,我们必须转向更为强大的AspectJ。这里主要注意的是如何使用spring为AspectJ 切面注入依赖。这里就不写了,我感觉一般也用不到,用到的时候在补充吧。。。

转载于:https://www.cnblogs.com/ssh-html/p/9747585.html

你可能感兴趣的文章
安卓学习资料推荐-25
查看>>
Mysql数据库备份和还原常用的命令
查看>>
关于退出当前页面在火狐的一些问题
查看>>
【项目实施】项目考核标准
查看>>
spring-aop AnnotationAwareAspectJAutoProxyCreator类
查看>>
经典入门_排序
查看>>
Redis Cluster高可用集群在线迁移操作记录【转】
查看>>
二、spring中装配bean
查看>>
VIM工具
查看>>
javascript闭包
查看>>
@Column标记持久化详细说明
查看>>
创建本地yum软件源,为本地Package安装Cloudera Manager、Cloudera Hadoop及Impala做准备...
查看>>
mysql8.0.13下载与安装图文教程
查看>>
站立会议08(冲刺2)
查看>>
url查询参数解析
查看>>
http://coolshell.cn/articles/10910.html
查看>>
[转]jsbsim基础概念
查看>>
DIV和SPAN的区别
查看>>
第一次使用cnblogs
查看>>
C#语法糖之 session操作类 asp.net
查看>>