您的位置:首页 > 编程语言 > Java开发

Spring AOP 基本方式(Advice方式)

2013-09-19 10:21 246 查看
1、通知 Advice

1)根据对方法进行拦截的时机,分为四种:

Before Advice:方法执行之前进行拦截 

AfterReturning Advice:方法正常执行结束之后进行拦截

AfterThrowing Advice:方法异常结束之后进行拦截

Around Advice:环绕通知

2)注意:

AroundAdvice应单独使用,不和其他的三种混合

AroundAdvice中要手动调用目标方法:methodInvocation.proceed()

2、用ProxyFactoryBean来创建代理对象

拦截器Advice

创建Proxy

<bean id=”proxy” class=”org.springframework.ProxyFactoryBean”>

<property name=”target” ref=”targetBean” />

<property nam=”interceptorNames”>

<list>

<value>adviceBean</value>

......

</list>

</property>

</bean>

3、Spring AOP advice方式与AOP方式对比

Spring对基本AOP方式进行了封装,把原来的拦截器改造成能够按时间分来进行拦截的Advice通知方式,平且提供了创建Proxy代理对象的ProxyFactoryBean,只需要给ProxyFactoryBean同时传递target目标对象属性、和interceptorNames的advice集合属性即可。

4、主要实现代码

1)Advice实现

Before Advice

implements MethodBeforeAdvice {

before(Method method, Object[] args, Object target){

//拦截逻辑

log.info(“this is before advice”);

......

}

}

AfterReturning Advice

implements AfterReturningAdvice {

afterReturning(Object result, Method method, Object[] args, Object target) {

//拦截逻辑

log.info(“this is afterReturning advice”);

......

}

}

AfterThrowing Advice

Implements ThrowsAdvice {

afterThrowing(Exception e) {

//拦截逻辑

log.info(“this is afterThrowing advice”);

......

}



Around Advice

Implements MethodInterceptor {

invoke(MethodInvocation methodInvocation) {

//拦截逻辑

......

Object result = methodInvocation.proceed();

......

return result;

}

}

可以以spring配置文件或者注解方式声明adviceBean

2)Proxy实现

<bean id=”proxy” class=”org.springframework.ProxyFactoryBean”>

<property name=”target” ref=”targetBean” />

<property nam=”interceptorNames”>

<list>

<value>adviceBean</value>

......

</list>

</property>

</bean>

3)注意:

在spring3中,spring aop advice 依赖于 aopalliance-1.0.jar 包,不引用这个jar包,Acvice类就不能实现相应接口
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  aop spring