七.Spring AOP 之增强

来源:互联网 发布:考研数学网络课程 编辑:程序博客网 时间:2024/05/21 06:25

类型:前置、后置、环绕、异常抛出、引介
一.前置
Waiter接口有两个方法,一个greetTo,一个serveTo。NaiveWaiter为其实现类。待织入类GreetingBeforeAdvice需要实现了MethodBeforeAdvice接口,有一个before方法(三个参数(Method method, Object[] args, Object obj)),obj目标实例, args为方法参数。此方法可以捕捉到greetTo,serveTo方法参数。

<beanid="greetingBefore"class=“……..GreetingBeforeAdvice" />①<bean id="target" class=“…….NaiveWaiter" />②<bean id="waiter" class="org.springframework.aop.framework.ProxyFactoryBean"      p:proxyInterfaces=“…….Waiter" ③      p:interceptorNames="greetingAdvice,...,..."④      p:target-ref="target"⑤/>常用:对类增强,不用接口<bean id=“waiter“     class=”org.springframework.aop.framework.ProxyFactoryBean“    …… ……   p:proxyTargetClass="true“  />

二.后置增强,差别不大,接口,接口实现类,待织入类实现后置接口,配置好XML即可
三.环绕增强
接口,接口实现类,待织入类实现环绕接口。

public class GreetingInterceptor implements MethodInterceptor {    public Object invoke(MethodInvocation invocation) throws Throwable {        Object[] args = invocation.getArguments();        String clientName = (String)args[0];        System.out.println("GreetingInterceptor:How are you!Mr."+clientName+".");        Object obj = invocation.proceed();        System.out.println("GreetingInterceptor:Please enjoy yourself!");        return obj;    }}

然后配置到XML。和前后置一样。
四.异常抛出增强
业务实现类ForumService有两业务方法,TransactionManager和updateForum都可能抛出异常,业务增强类TransactionManager实现ThrowsAdvice接口

public class TransactionManager implements ThrowsAdvice {    public void afterThrowing(Method method, Object[] args, Object target,            Exception ex) throws Throwable {        System.out.println("-----------");        System.out.println("method:" + method.getName());        System.out.println("抛出异常:" + ex.getMessage());        System.out.println("成功回滚事务。");    }}

配置的时候可稍微修改,不配置接口Bean,而配置实现类Bean

<bean id="forumService" class="org.springframework.aop.framework.ProxyFactoryBean"        p:interceptorNames="transactionManager"        p:target-ref="forumServiceTarget"        p:proxyTargetClass="true" />

五.引介增强
不是在目标方法周围织入增强,而是为目标创建新的方法和属性

0 0
原创粉丝点击