浏览 1022 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2007-11-17 关键字: 基于XML Sechma和基于Annotation实现AOP
在Spring 2.0中,除了传统的通过实现AOP AIP的方式来实现Advice之外,还提供了两种更加简便的方式来实现Advice:1)基于XML Schema的设置;2)基于Annotation的支持,采用这两种方式,Advice将不用实现特定的接口。现在让我们来看看如何使用这两种方式来分别实现Before Advice、After Advice、Around Advice、Throwing Advice。
一、Before Advice:基于XML Schema 当基于XML Schema实现Before Advice时,你的Advice类不用实现org.springframework.aop.MethodBeforeAdvice接口,例如: java 代码
before方法是在目标对象上的方法被执行前要执行的方法,before方法中的JoinPoint参数是可选项,你可以根据需要决定是否需要JoinPoint参数,通过JoinPoint对象,你可以获得目标对象(getTarget())、目标方法上的参数(getArgs())等信息。 然后在XML中为目标对象指定LogBeforeAdvice代理: xml 代码
如上所示,在Spring 2.0中要使用基于XML Sechma声明AOP的方式,需要在XML中加入aop的名称空间。当基于XML Sechma实现AOP时,所有的AOP都是在 现在调用任何MessageSender接口上的方法之前都会执行LogBeforeAdvice的before方法,例如: java 代码
二、Before Advice:基于Annotation 使用Annotation来实现Advice,在XML文件上的定义要比基于XML Sechema的方法要简便的多,但在实现Before Advice类时,则需要使用到@Aspect、@Before标识,并需要引入org.aspectj.lang.annotation包中的类。还以LogBeforeAdvice为例,LogBeforeAdvice类需要改为: java 代码
如上所示,通过@Aspect将一个类声明为Aspect类,通过@Before将方法声明Before Advice,方法中的JoinPoint同样是可选的。然后在XML文件中做如下定义: xml 代码
所有基于Annotation实现的Advice,在XML文件中都只要使用 三、After Advice:基于XML Sechma 和Before Advice一样,基于XML Sechma实现After Returning Advice时,不再需要org.springframework.aop.AfterReturningAdvice接口: java 代码
然后在XML中做如下设置: xml 代码
四、After Advice:基于Annotation 和Before Advice相似,使用@AfterReturning来表示After Returning Advice: java 代码
这里和Before Advice有点不同的是,在定义Poincut表示式时,多了一个returning属性,用于指定目标方法执行完后的返回值。 XML文件中的设置与LogBeforeAdvice的相似(将logBeforeAdvice的定义改为logAfterReturning的定义),不再列举。 五、Around Advice:基于XML Sechma 在Spring 2.0中,Around Advice不用实现org.aoplliance.intercept.MethodInterceptor接口,但Advice的方法必须返回对象,并且必须定义一个ProceedingJoinPoint参数,例如: java 代码
XML中的设置如下: xml 代码
六、Around Advice:基于Annotation 和Before Advice相似,使用@Around来表示Around Advice: java 代码
XML文件中的设置与LogBeforeAdvice的相似(将logBeforeAdvice的定义改为logAroundAdvice的定义),不再列举。 七、Throw Advice:基于XML Sechma 在Spring 2.0中,Throw Advice不用实现org.springframework.aop.ThrowsAdvice接口,但Advice的方法必须定义Throwable(或其子类)参数,例如: java 代码
在XML的设置如下: xml 代码
在 八、Throw Advice:基于Annotation java 代码
XML文件中的设置与LogBeforeAdvice的相似(将logBeforeAdvice的定义改为logThrowingAdvice的定义),不再列举。 九、Pointcut 在Spring 2.0中,span声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。 |
|
| 返回顶楼 | |


