`
garrincha
  • 浏览: 12820 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

Spring AOP 盗梦空间之五——切入点表达式

阅读更多
书接上回
上回降到LEO把before和after重构,改为使用around。
日本人提高了防范,LEO不确定需要从哪个方法入手,需要一些通配符来侵入方法。
这里我们就谈谈AOP语法中表达式
@Pointcut("execution(public void com.spring.service.Person.haveSleep())")
这是之前例子的表达式。我们来详细讲解一下
这是指定了一个具体的方法,这个很好理解。
1、假设Person类中haveSleep()方法有一个重载方法
public void haveSleep(date starttime ,date endtime)
这两个方法LEO都需要编制waving,怎么办,我们把这个切入点改为
@Pointcut("execution(public void com.spring.service.Person.haveSleep(..))")
加了2个.问题就解决了。有点类似于正则表达式吧。

2、LEO还需要编织其他睡觉的方法,包括haveNap()和haveNightmare()方法,LEO发现所有睡觉的方法都是以have开头的。怎么办呢?
@Pointcut("execution(public void com.spring.service.Person.have*(..))")
同正则表达式一样*表示任意数字的字符

3、LEO需要把范围再扩大一些,扩大到com.spring.service下所有类的所有方法
@Pointcut("execution(* com.spring.service.*.*(..))")
星号的用法自己摸索和体会一下吧。

4、之前在谈过使用@AfterThrowing来捕获异常,使用表达式可以专门针对Throws的方法进行编织waving。(即方法声明中带有Throws的方法)
@Pointcut("execution(public void com.spring.service.Person.have*() throws Exception)"
在这里我们以have开头的方法有多个,但是只会在
public void haveNightmare()throws Exception方法上进行编织

先到这里啦,一般的需求,这几种相互组合就差不多了,再有需要看文档即可
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics