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

    }

    最后运行结果是:






  • 相关阅读:
    php 内置的 webserver 研究。
    php 系列
    git 以及 github 使用系列
    中午和同事聊天,了解的一点网络方面的东西。
    javascript中0.01*2324=23.240000000000002 ?
    javascript的 replace() 方法的使用讲解
    PHP中的ORM
    javascript 函数 add(1)(2)(3)(4)实现无限极累加 —— 一步一步原理解析
    animate.css
    面向对象编程
  • 原文地址:https://www.cnblogs.com/xingyun/p/2332311.html
Copyright © 2011-2022 走看看