Javaによるインターセプタのインターセプタ機能の実現

1644 ワード

Javaの反射技術を利用
1、コネクタ
public interface AInterface
{
    void a();
}

2,実装クラス
public class AImp implements AInterface
{
    @Override
    public void a()
    {
        System.out.println("aaaaaaaaaaa");
    }
}

3、カスタムブロッキング
public class MyInterceptorClass
{
    void before(){
        System.out.println("     MyInterceptorClass      : before()");
    }
    void post(){
        System.out.println("     MyInterceptorClass      : after()");
    }
}

4,動的エージェント反射クラス
public class MyDynamicProxyHandler implements InvocationHandler
{
    private Object obj;
    //      
    private MyInterceptorClass interceptor = new MyInterceptorClass();

    public Object bind(Object obj)
    {
        this.obj = obj;
        return Proxy.newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(),this);
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        Object result = null;
        interceptor.before();
        result = method.invoke(obj, args);
        interceptor.post();
        return null;
    }
}

5,クライアント例DemoTestInterceptor
public class DemoTestInterceptor
{
    public static void main(String args[]) {
    //           
    MyDynamicProxyHandler handler = new MyDynamicProxyHandler();

    //         
    AInterface business = new AImp();

    //         ,           
    AInterface businessProxy = (AInterface) handler.bind(business);

    //           ,       
    businessProxy.a();
}
}