zoukankan      html  css  js  c++  java
  • Struts2拦截器的底层实现(AOP思想)

    1.目标类接口:

    package com.interceptor;

    public interface TargetInterface
    {
    public void doSomething();
    }

    2.目标类实现:

    package com.interceptor;

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

    3.自定义拦截器:

    package com.interceptor;

    public class Interceptor
    {

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

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

    4.将拦截器类和目标代码类结合在一起的处理类:

    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;
    }
    }

    5.将目标类进行包装后的代理类:

    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);
    }
    }

    6.客户端程序测试类:

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

    }

    最后运行结果是:






  • 相关阅读:
    使用iOS网络请求
    Invalid RNPermission 'ios.permission.xxx'. should be one of: ( )
    React Native 报错 Error: spawn EACCES 权限
    React Native 适配Android物理返回键,实现连续两次点击退出
    图解:平衡二叉树,AVL树
    NOIP 骗分技巧
    P1004 方格取数
    5. 最长回文子串
    全链路压测自动化实践
    深度学习在美团配送ETA预估中的探索与实践
  • 原文地址:https://www.cnblogs.com/xingyun/p/2332311.html
Copyright © 2011-2022 走看看