拦截器:Interceptor(原理)

来源:互联网 发布:java机器人编程 编辑:程序博客网 时间:2024/04/28 07:56

1. 真正存放field级别错误信息的对象是LinkedHashMap

2. 该LinkedHashMap的key是String类型的,value是ArrayList类型的

3. 对于Action级别的错误信息,实际上是放置在ArrayList中的

4 拦截器:Interceptor

 

 

package com.interceptor;

public class Target implements TargetInterface
{
    public void doSomething()
    {
        System.out.println("do something");
    }
}

 

 

package com.interceptor;

public interface TargetInterface
{
    public void doSomething();
}

 

 

package com.interceptor;

public class Interceptor {
    public void before() {
        System.out.println("before");
    }
   
    public void after()    {
        System.out.println("after");
    }
}

 

 

package com.interceptor;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class MyHandler implements InvocationHandler
{
    private Object object;

    private Interceptor interceptor = new Interceptor();

    public void setObject(Object object)
    {
        this.object = object;
    }

    public Object invoke(Object proxy, Method method, Object[] args)
            throws Throwable
    {
        Object result = null;

        interceptor.before();

        result = method.invoke(object, args);

        interceptor.after();

        return result;

    }

}

 

 

package com.interceptor;

import java.lang.reflect.Proxy;

public class MyProxy
{
    public Object getProxy(Object object)
    {
        MyHandler myHandler = new MyHandler();

        myHandler.setObject(object);

        return Proxy.newProxyInstance(Target.class.getClassLoader(), object
                .getClass().getInterfaces(), myHandler);
    }
}

 

 

package com.interceptor;

public class Client
{
    public static void main(String[] args)
    {
        TargetInterface target = new Target();
       
        MyProxy myProxy = new MyProxy();
       
        TargetInterface proxy = (TargetInterface)myProxy.getProxy(target);
       
        proxy.doSomething();
    }

}

 

结果为:

before

do something

after

原创粉丝点击