日期:2014-05-16  浏览次数:21033 次

【spring学习笔记二】AspactJ常见注解和xml实现

AspactJ常见注解

?

@Pointcat:定义切入点

@Before:前置通知,调用匹配方法之前执行

@AfterReturning:后置通知,通常在一个方法返回的时候执行

@AfterThrowing:异常通知,抛出异常通知在一个方法抛出异常后执行

@After:最终通知,不论一个方法是如何结束的,最终通知都会运行,通常用它来释放资源。

@Around:环绕通知,环绕通知在一个方法执行之前和之后执行,它使得一个通知有机会在方法之前和之后进行,而且它可以决定一个方法什么时候执行,如何执行,甚至是否执行。

?

Pointcat

切入点表达式execution(*test(*))&&args(param)

例:@Pointcut("execution(public void com.mihe.dao.impl.StudentDaoImpl.*Student())")

起首execution(*test(*))匹配任何方法名为test,且有一个任何类型的参数

args(param)可以匹配参数

修饰符是可选的

返回值是必填的,但可以用*表示统配

类型声明可选,也可以是任何类型

方法名必填,但也可以用*做模糊匹配,比如上例就是匹配所有以Student结尾的方法

参数列表:

()表示没有参数

(..)表示匹配接收任意个参数

(..,java.lang.String)表示匹配最后一个参数是字符串,前面可以有任意多个任意类型的参数

(*,java.lang.String)表示匹配最后一个参数是字符串,前面只可以有一个任意类型的参数

异常也可以匹配,全名就可以,如果有负数个就用都好分割。

?

AspectJ的xml实现

在Srping配置文件中,所有AOP相关的定义必须放在<aop:config>标签下,该标签下可以有<aop:pointcut><aop:advisor><aop:aspect>标签,配置顺序不可变

<aop:pointcut>用来定义切入点,该切入点可以重用

<aop:advisor>用来定义只有一个通知和一个切入点的切面

<aop:aspect>用来定义切面,该切面可以定义多个切入点和通知,而且标签内部通知和切入点是无序的,

?

配置切入点

<aop:pointcut expression="execution(public void com.mihe.dao.impl.StudentDaoImpl.*Student())" id="studentPointcat"/>

配置切面

?<aop:aspect id="studentAspect" ref="studentAspectJInterceptor">

?<aop:before method="beforeMetord" pointcut-ref="studentPointcat"/>

?<aop:after-returning method="afterReturningMetord" ?pointcut-ref="studentPointcat" returning="s"/>

?</aop:aspect>

?

?