您的位置:首页 > 编程语言 > Java开发

Java设计模式-代理模式

2016-06-18 21:08 411 查看

Java设计模式-代理模式

2016/6/18 18:55:22 seventeenWen

其实学代理模式主要是为了理解Spring的AOP思想,

动态代理模式

动态代理主要涉及Proxy和InvocationHandler两个类,可以通过实现该接口的invoke方法,将横切逻辑和业务逻辑编织在一起,

newProxyInstance()的三个参数

方法作用:动态生成一个对象,这个对象实现类多个接口

Object proxy = Proxy.newProxyInstance(ClassLoader classLoader,Class[] interfaces,InvocationHandler handler);

ClassLoader:类加载器

interfaces:需要实现的接口

handler:调用处理器

简单的Demo

Demo的设定:现在要做的事情是我在每一次数据库的操作前后添加日志信息

先来简单定义一个接口:

A接口:

public interface AService {

public void addA();

public void deleteA();

}


A的实现类:

public class AServiceImp implements AService{

public void addA() {

System.out.println("向A中添加一条数据");

}

public void deleteA() {

System.out.println("向A中删除一条数据");

}

}


日志记录类:

public class Log {

public void
afa2
beforeLog(){

System.out.println("操作前-----记录日志");

}

public void afterLog(){

System.out.println("操作后-----记录日志");

}

}


Handler类(动态代理的关键类):

public class ProxyService implements InvocationHandler{

private Object target;

private Log log;

public ProxyService(Object target){

this.target=target;

}

public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

log =new Log();

log.beforeLog();

Object result =method.invoke(target, args);

log.afterLog();

return result;

}

}


测试类:

public class RunTest {

@Test

public void Demo(){

AService a =new AServiceImp();

ProxyService handler =new ProxyService(a);

ClassLoader loader = this.getClass().getClassLoader();

Class[] interfaces ={AService.class};

AService proxy =(AService) Proxy.newProxyInstance(loader, interfaces, handler);

proxy.addA();

proxy.deleteA();

}

}


运行结果:

操作前-----记录日志

向A中添加一条数据

操作后-----记录日志

操作前-----记录日志

向A中删除一条数据

操作后-----记录日志
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: