代理模式
来源:互联网 发布:微博用户数据 编辑:程序博客网 时间:2024/06/07 00:14
代理模式
- 代理模式
- 概述
- 代理模式分类
- 静态代理模式
- 动态代理模式
- cglib代理
- 参考资料
- 代理模式
概述
代理(proxy)是一种设计模式,它提供了对目标对象另外的访问方式,即通过代理访问目标对象,这样做的好处是可以在目标对象实现的基础上,增加额外的功能操作,或者说是扩展目标对象的功能。代理模式的关键是:代理对象与目标对象。学习代理模式的原因是在Spring的AOP编程中,会用到JDK代理和cglib代理。
代理模式分类
静态代理模式
静态代理模式的特点:代理对象要实现与目标对象一样的接口,并在目标对象功能之上增加新的功能。静态代理模式的缺点是:每一个需要扩展的目标对象都对应一个代理类,这样会造成存在很多的代理类,这是其中的一个弊端,一旦接口增加方法,目标对象有代理对象都要去修改,这是静态代理的两个致命的弱点。
动态代理模式
动态代理的代理对象不需要实现接口,代理对象的生成是动态的,是利用JDK的API动态的在内存中构建代理对象,需要我们指定创建代理对象实现的接口的类型。动态代理也称为JDK代理,也可称为接口代理。动态代理参考文章: http://blog.csdn.net/jiankunking/article/details/52143504# Java的动态代理类在java.lang.reflect包下。
cglib代理
cglib代理也叫作子类代理,在内存中构建一个子类对象从而实现对目标对象功能的扩展。在Spring中用到了cglib代理,其它的代理基本不用。在使用cglib代理时,首先需要引入cglib的包,在Spring 3.x版本中,只需要引入Spring-Core的核心包即可,在该核心包中包含了cglib的包,但是在Spring 2.x中需要专门引入cglib的包。
- 委托类(被代理的类) UserDao.java
package com.jpzhutech.cglib;public class UserDao { public void save(){ System.out.println("保存数据"); }}
- cglib代理类 ProxyFactory.java
package com.jpzhutech.cglib;import java.lang.reflect.Method;import org.springframework.cglib.proxy.Enhancer;import org.springframework.cglib.proxy.MethodInterceptor;import org.springframework.cglib.proxy.MethodProxy;public class ProxyFactory implements MethodInterceptor { private Object target; public ProxyFactory(Object target) { this.target = target; } public Object getProxyInstance(){ //工具类 Enhancer enhancer = new Enhancer(); //设置父类 enhancer.setSuperclass(target.getClass()); //设置回调函数 enhancer.setCallback(this); //创建子类 return enhancer.create(); } @Override public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable { System.out.println("开始事务"); Object returnValue = method.invoke(target, args); System.out.println("提交事务"); return returnValue; }}
- 主类 mian.java
package com.jpzhutech.cglib;public class App { public static void main(String[] args) { UserDao target = new UserDao(); UserDao proxy = (UserDao) new ProxyFactory(target).getProxyInstance(); proxy.save(); }}
参考资料
- http://blog.csdn.net/jiankunking/article/details/52143504#
0 0
- 代理模式--动态代理
- 代理模式-静态代理
- 代理模式-静态代理
- 代理模式 & 动态代理
- 代理模式--静态代理
- 代理模式--动态代理
- 代理模式(动态代理)
- 代理模式-动态代理
- 代理模式-动态代理
- 代理模式动态代理
- 代理模式-静态代理
- 代理模式-动态代理
- 代理模式 -动态代理
- 代理模式---动态代理
- 代理模式-动态代理
- 代理模式--静态代理
- 代理模式!
- 代理模式
- eclipse查看jar包源代码乱码问题解决
- 大数据系列修炼-Scala课程68
- C++学习笔记--对象创建
- hdu 2098 素数打表
- Android 微信分享与QQ分享功能
- 代理模式
- sizeof与strlen用法详解(结构体对齐)
- 【C/C++】BOOST 线程完全攻略 - 基础篇
- socket编程接口介绍
- 原型模式(Prototype)
- 杭电ACM2001题-------C语言
- 读书笔记-推荐系统实战:第一章
- 微信web开发者工具
- 学生成绩管理系统总体设计