读书人

动态署理入门

发布时间: 2012-10-21 09:00:08 作者: rapoo

动态代理入门

使用InvocationHandler实现动态代理,也就是我们常说的代理模式的一种实现方式之一:(这也是从其他的地方找过来的,很浅显易懂,非原创)

?

?上代码:

?IHello接口:

public interface IHello{public void hello(String name);}

?

IHelloImpl:

/** * @copyright  XXX */package com.yourcompany.struts.proxy;/** * @author meemac * */public class HelloImpl implements IHello{/* (non-Javadoc) * @see com.yourcompany.struts.proxy.IHello#hello(java.lang.String) */public void hello(String name){// TODO Auto-generated method stubSystem.out.println("Hello"+name);}}

?

代理类:

/** * @copyright  XXX */package com.yourcompany.struts.proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;/** * @author meemac *  */public class HelloProxyImpl implements InvocationHandler{private Object delegate;public Object bind(Object delegate){this.delegate = delegate;return Proxy.newProxyInstance(delegate.getClass().getClassLoader(),delegate.getClass().getInterfaces(), this);}/* * (non-Javadoc) *  * @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object, * java.lang.reflect.Method, java.lang.Object[]) */public Object invoke(Object proxy, Method method, Object[] args)throws Throwable{Object result = null;print("call before  :" + method);result = method.invoke(delegate, args);print("call after :" + method);return result;}private void print(String message){System.out.println(message);}}

??

?

?

? 测试类:

/** * @copyright  XXX */package com.yourcompany.struts.proxy;/** * @author meemac *  */public class Demo{public static void main(String[] args){HelloProxyImpl helloProxyImpl = new HelloProxyImpl();IHello hello = (IHello) helloProxyImpl.bind(new HelloImpl());hello.hello("你妹的,我测试下.");}}

?

读书人网 >编程

热点推荐