ITPub博客

首页 > Linux操作系统 > Linux操作系统 > spring 2.5 aop 1

spring 2.5 aop 1

原创 Linux操作系统 作者:seablue_xj 时间:2008-05-08 22:54:39 0 删除 编辑

Spring 2.5 aop

类别

函数

入参

说明

方法切点函数

execution

方法匹配模式串

满足某一匹配模式的所有目标类方法的连接点。如execution(*greetTo(..))表示所有目标类中的greetTo()方法

@annotation()

方法注解类名

@annotation(com.myapp.Test)表示任何标注了@Test的目标方法类

方法入参切点函数

args()

类名

args(com.myapp.Waiter)表示所有有且仅有一个按类型匹配于Waiter入参的方法

@args()

类型注解类名

@args(com.myapp.Test)表示有且仅有一个入参且如参对象的类标注@Test注解

目标类切点函数

within()

类名匹配串

within(com.myapp.service.*)表示com.myapp.service包中所有类的所有方法。

within(com.myapp.dao.*Dao)表示在com.myapp.dao包中所有以Dao结尾的所有连接点

target()

类名

通过target(com.myapp.Service)定义的切点,Service、以及Service实现类ServiceImp中所有连接点都匹配该切点

@within()

类型注解类名

@within(com.myapp.Service)定义的切点,假如Test类标注了@Service注解,那么Test以及Test的实现类TestImp的所有连接点都匹配

@target()

类型注解类名

@target(com.myapp.Test)假如Service标注了@Test,则Service所有连接点匹配切点

代理类切点函数

this()

类名

代理类按类型匹配于指定类,则被代理的目标类所有连接点匹配切点

 

使用JointPoint pProceedingJointPoint  p.getArgs()即为拦截方法所要传递的参数

 

 

在如下的两个@AfterReturning @AfterThrowing注释中,doAccessCheck()中的String value doExeceptionActions()中的Throwable ex必须同名,但是这并不是意味着,只有在方法中返回”value”或者是抛出”ex”这样的参数才能够被捕获,而是在程序中只要存在返回,或者抛出,不论是什么参数,都能够被捕获

@AfterReturning(pointcut="inexampleLayar()",returning="value")

    public void doAccessCheck(JoinPoint j,String value)

    {}

@AfterThrowing(pointcut = "method1()", throwing = "ex")

    public void doExceptionActions(JoinPoint jp, Throwable ex) {}

 

 

执行顺序:

 

开始顺序@Around()--@Before()--@AfterReturning()--@After()

结束顺序@Before()--@Around()@AfterReturning()--@After()

1.around method() start....

2.before method start..

2 before method finished...

in getFoo **  //业务执行

1 around method() finished ...

3.do access check start....

3 do access check finished...

4.after medhod check start....

4 after method finished...

 

在使用@AfterThrowing 时,必须将其放在第一位,即@Around之前,否则@AfterThrowing将实效。被捕获后的错误如果不再次抛出,将不会被函数体执行的catch块捕获,如果使用@AfterThrowing去捕获错误,则希望被捕获的函数体不要使用try catch 块,如果使用,则应该将错误再次抛出,例如try{…} catch(Exception e){ throw e}, @AfterThrowing中捕获到的异常处理之后,如果再次抛出,则上层也不会再得到异常信息。

 

 

参数入参中使用的通配符

l  * 匹配任意字符,但它只能匹配上下文中的一个元素

l  .. 匹配任意字副,可以匹配上下文中的多个元素,但在表示类时,必须和*联合使用,而在表示入参时则单独使用。

l  + 表示按类型匹配制定类的所有类,仅能跟在类名后面

 

AspectJ

使用spring 2.x AspectJ,需要在配制文件中加入,以打开AspectJ的代理,

 

 

execution(public * *(..)) 任何公共方法

 

within(aop.example..*) aop.example包中的方法

 

execution(* aop.example.FooService.setFoo(String,int)) and args(name,age) setFoo(String name,int age )方法将被拦截

 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7528999/viewspace-263395/,如需转载,请注明出处,否则将追究法律责任。

下一篇: object file byte转换
请登录后发表评论 登录
全部评论

注册时间:2007-12-21

  • 博文量
    10
  • 访问量
    9927