【Spring】AOP(第二篇)

上一篇以UFC拳手入场为例简单介绍了切面的概念与xml配置。

这次说明切点引用、环绕通知与通知获得参数。

上次说过拳手入场时Bruce Buffer负责introduce。

但事实上,拳手入场时需要工作的人并不只有Bruce Buffer。我们还有很多工作人员需要在拳手入场时做各种不同的工作。现在回到我们的配置文件并思考:难道我们要为每一个通知都写一次pointcut expression? 答案务必是否定的。

<aop:config><!– 单独定义一个pointcut –><aop:pointcut expression=”execution(* pac.bean.Fighter.entrance(..))”/><aop:aspect ref=”bruceBuffer”><!– 需要时引用这个pointcut –><aop:before pointcut-ref=”fighterEntrance”method=”introduce” /></aop:aspect></aop:config>

现在看起来舒服多了。

现在让我们看一下环绕通知。举个栗子~观众们观看比赛,,开始前找自己的座位、结束后兴奋地欢呼、看到拳手被踢到裆部便不由自主地'Wooo~'一声。这些都是观看比赛时的各种举动,让我们把他变成拳手比赛切点的环绕通知。先看看观众的举动:

public void watchReaction(ProceedingJoinPoint joinPoint){try {System.out.println(“taking seats..”);joinPoint.proceed();System.out.println(“UFC!UFC!UFC!”);} catch (Throwable e) {System.out.println(“Wooo..”);}}

然后将其配置于xml:

<aop:pointcut expression=”execution(* pac.bean.Fighter.fight(..))” /><aop:around method=”watchReaction” pointcut-ref=”fighterFight” />

似乎没什么特别。只不过环绕方法中有一个ProceedingJoinPoint参数。顾名思义,非常好理解,proceed()让被通知的方法执行,当然,这个方法可以执行多次。最后说明一下<通知方法获得被通知方法的参数>。我现在把拳手类改成如下:

package pac.bean;public class Fighter {private String name;private String nickName;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getNickName() {return nickName;}public void setNickName(String nickName) {this.nickName = nickName;}public void entrance(String nameCard) {System.out.println(“Yo!” + nameCard + ” comin!!”);}}

关键是我在entrance方法中加入了nameCard参数,我就想这样称呼自己,希望Bruce Buffer介绍的时候也配合一点。

于是Bruce Buffer的introduce()也变成了如下:

public void introduce(String name){System.out.println(“Introducin first,Here comes the …”+name);}

最后看一看xml:

<aop:pointcut expression=”execution(* pac.bean.Fighter.entrance(..)) and args(asdfasdf)” /><aop:aspect ref=”bruceBuffer”><aop:before pointcut-ref=”fighterEntrance”method=”introduce” arg-names=”asdfasdf”/>

可以看到切点定义中的args和通知中的arg-names是对应的,而且是我瞎写的,以说明这和method的中的参数名毫无关系。好了,这样Bruce Buffer介绍我的时候会按我的nameCard的值介绍了。

本文出自 “view-source:localhost:80” 博客,请务必保留此出处

更重要的是心理上的完全自由和放松,

【Spring】AOP(第二篇)

相关文章:

你感兴趣的文章:

标签云: