接口
public interface ContactDAO { public void save(); }
接口实现
public class ContactDAOImpl implements ContactDAO { @Override public void save() { System.out.println("save start!"); } }
Server
public class ContactService { public void test(){ ContactDAO cdao = new ContactDAOImpl(); cdao.save(); } }
代理类
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class ActiveProxy implements InvocationHandler { private Object target; public Object getTarget() { return target; } public void setTarget(Object target) { this.target = target; } public void beforeSave(){ System.out.println("before save!"); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { beforeSave(); method.invoke(target, args); return null; } }
//method.invoke(被代理的方法,参数)
测试类
import java.lang.reflect.Proxy; import org.junit.Test; public class ContactServiceTest { @Test public void testProxy(){ ContactDAO cdao = new ContactDAOImpl(); ActiveProxy apro = new ActiveProxy(); apro.setTarget(cdao); ContactDAO conDaoProxy = (ContactDAO)Proxy.newProxyInstance(cdao.getClass().getClassLoader(), new Class[]{ContactDAO.class}, apro); conDaoProxy.save(); } }
//Proxy.newProxyInstance("产生代理的类","代理对象的实现的接口","处理的Handler")