首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

Spring中的Advice部类及其应用

2013-03-01 
Spring中的Advice类型及其应用在Spring中,Advice都是通过Interceptor来实现的,主要有以下几种:1. 环绕Advi

Spring中的Advice类型及其应用
 

      在Spring中,Advice都是通过Interceptor来实现的,主要有以下几种:

1. 环绕Advice:

//例子摘自Spring referencepublic interface MethodInterceptor extends Interceptor {
      Object invoke(MethodInvocation invocation) throws Throwable;
}
public class DebugInterceptor implements MethodInterceptor {

    public Object invoke(MethodInvocation invocation) throws Throwable {
        System.out.println("Before: invocation=[" + invocation + "]");  //(1)
        Object rval = invocation.proceed();
        System.out.println("Invocation returned");  //(2)
        return rval;
    }
}

      环绕advice类似一个拦截器链,这个拦截器链的中心就是被拦截的方法。在程序(1)(2)我们可以加入我们自己的代码,以表示在方法执行前后我们需要干什么。invocation.proceed()方法运行指向连接点的拦截器链并返回proceed()的结果。

2. Before Advice

public interface MethodBeforeAdvice extends BeforeAdvice {
    void before(Method m, Object[] args, Object target) throws Throwable;
}

        一个更简单的通知类型是<?xml version="1.0" encoding="UTF-8"?>
Spring中的Advice部类及其应用<beans xmlns="http://www.springframework.org/schema/beans"
Spring中的Advice部类及其应用    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
Spring中的Advice部类及其应用    xmlns:aop="http://www.springframework.org/schema/aop"
Spring中的Advice部类及其应用    xmlns:tx="http://www.springframework.org/schema/tx"
Spring中的Advice部类及其应用    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
Spring中的Advice部类及其应用           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
Spring中的Advice部类及其应用           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
Spring中的Advice部类及其应用
Spring中的Advice部类及其应用    <bean id="loginServiceTarget"
Spring中的Advice部类及其应用        class="com.learn.spring.test.advisor.LoginServiceImpl"/>
Spring中的Advice部类及其应用        
Spring中的Advice部类及其应用    <bean id="loginNameCheckInterceptor"
Spring中的Advice部类及其应用        class="com.learn.spring.test.advisor.LoginNameCheckInterceptor"/>
Spring中的Advice部类及其应用        <!-- 
Spring中的Advice部类及其应用    <bean id="loginCheckInterceptor"
Spring中的Advice部类及其应用        class="com.learn.spring.test.advisor.LoginCheckInterceptor"/>
Spring中的Advice部类及其应用         -->
Spring中的Advice部类及其应用    <bean id="loginCountInterceptor"
Spring中的Advice部类及其应用        class="com.learn.spring.test.advisor.LoginCountInterceptor"/>
Spring中的Advice部类及其应用    <bean id="exceptionThrowInterceptor"
Spring中的Advice部类及其应用        class="com.learn.spring.test.advisor.ExceptionThrowInterceptor"/>
Spring中的Advice部类及其应用        
Spring中的Advice部类及其应用    <bean id="loginService" class="org.springframework.aop.framework.ProxyFactoryBean">
Spring中的Advice部类及其应用        <property name="target"><ref local="loginServiceTarget"/></property>
Spring中的Advice部类及其应用        <property name="proxyInterfaces">
Spring中的Advice部类及其应用            <list>
Spring中的Advice部类及其应用                <value>com.learn.spring.test.advisor.LoginService</value>
Spring中的Advice部类及其应用            </list>
Spring中的Advice部类及其应用        </property>
Spring中的Advice部类及其应用        <property name="interceptorNames">
Spring中的Advice部类及其应用            <list>
Spring中的Advice部类及其应用                <value>loginNameCheckInterceptor</value>
Spring中的Advice部类及其应用                <value>loginCountInterceptor</value>
Spring中的Advice部类及其应用                <value>exceptionThrowInterceptor</value>
Spring中的Advice部类及其应用            </list>
Spring中的Advice部类及其应用        </property>
Spring中的Advice部类及其应用    </bean>
Spring中的Advice部类及其应用</beans>

测试代码运行:

public class Test {

    public static void main(String[] args) throws Exception {
        BeanFactory bf = 
            BeanFactoryFactory.getBeanFactory("beans.xml", Test.class);
        LoginService ls = (LoginService) bf.getBean("loginService");
        ls.login("myyate", "pass");
    }
}

输出结果:

check user's name is valid?
myyate passed check....
myyate is logining system...
Counting the login counts of myyate

热点排行