代码之家  ›  专栏  ›  技术社区  ›  Allain Lalonde

没有目标对象的Java动态代理?

  •  3
  • Allain Lalonde  · 技术社区  · 15 年前

    在使用动态代理时,如果没有实际的目标对象,如何使用Java的调用拦截器?

    思想?

    1 回复  |  直到 15 年前
        1
  •  7
  •   TofuBeer    15 年前

    也许我误解了这个问题(如果是的话,请让我知道!),但这会让你开始吗?

    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    import java.util.Arrays;
    
    public class Main
    {
        public static void main(final String[] argv)
        {
            final Object             object;
            final InvocationHandler  handler;
            final Runnable           runnable;
            final Comparable<Object> comparable;
    
    
            handler = new InvocationHandler()
            {
                public Object invoke(final Object   proxy,
                                     final Method   method,
                                     final Object[] args)
                    throws Throwable
                {
                    System.out.println(proxy.getClass());
                    System.out.println(method);
                    System.out.println(Arrays.toString(args));
                    return (0);
                }
            };
    
            object = Proxy.newProxyInstance(Main.class.getClassLoader(), 
                                            new Class[] { 
                                                Runnable.class, 
                                                Comparable.class,
                                            }, 
                                            handler);
    
            runnable = (Runnable)object;
            runnable.run();
    
            comparable = (Comparable<Object>)object;
            comparable.compareTo("Hello");
        }
    }