用 Java 实现拦截器 Interceptor 的拦截功能

  利用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();
}
}

你可能感兴趣的:(Java,基础)