动态代理

    技术2022-05-20  56

    接口

    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")


    最新回复(0)