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中删除一条数据 操作后-----记录日志
相关文章推荐
- Spring事务以及三大框架整合
- Java中的作用域及构造器
- Java反射机制
- Struts2
- Java 中的二维数组
- Spark java.lang.outofmemoryerror gc overhead limit exceeded 与 spark OOM:java heap space 解决方法
- 用javaCOPY文件数据
- log4j详细配置(项目中应用)
- 《Java项目实践》:简单聊天程序
- Struts2处理流程分析
- JAVA设计模式--观察者模式
- 如何使用 Java 中的数组
- Java函数的重载
- spring+struct+hibernate
- Java函数的定义
- JavaSE入门学习50:多线程编程(一)
- java线程池基础知识
- struts 笔记(王勇)
- hibernate笔记
- SpringMvc Eclipse搭建web项目