当前位置:  编程技术>java/j2ee

java 静态代理 动态代理深入学习

    来源: 互联网  发布时间:2014-10-22

    本文导语:  一、代理模式 代理模式是常用的java设计模式,特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。 代理类与委托类之间通常会存在关联关系,...

一、代理模式
代理模式是常用的java设计模式,特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。
代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。
按照代理的创建时期,代理类可以分为两种:
静态代理:由程序员创建或特定工具自动生成源代码再对其编译。在程序运行前代理类的.class文件就已经存在了。
动态代理:在程序运行时运用反射机制动态创建而成。
二、单个静态代理

代码如下:

public interface CountDao
{
// 查看账户方法
public void queryCount();
}
public class CountDaoImpl implements CountDao
{
public void queryCount()
{
System.out.println("查看账户方法...");
}
}
public class CountTrancProxy implements CountDao
{
private CountDao countDao;
public CountProxy(CountDao countDao)
{
this.countDao = countDao;
}
@Override
public void queryCount()
{
System.out.println("tranc start");
countDao.queryCount();
System.out.println("tranc end");
}
}
public class TestCount
{
public static void main(String[] args)
{
CountTrancProxy countProxy = new CountTrancProxy(new CountDaoImpl());
countProxy.updateCount();
}
}

tranc start
查看账户方法...
tranc end
三、多个静态代理
在上面代码的基础上新增了
代码如下:

public class CountLogProxy implements CountDao
{
private CountDao countDao;
public CountLogProxy(CountDao countDao)
{
this.countDao = countDao;
}
@Override
public void queryCount()
{
System.out.println("Log start");
countDao.queryCount();
System.out.println("Log end");
}
}

调用代码就变成了
代码如下:

// 体现了聚合的思想,代理之间的组合
public static void main(String[] args)
{
CountTrancProxy trancProxy = new CountTrancProxy(new CountDaoImpl());
CountLogProxy logPro = new CountLogProxy(trancProxy);
logPro.queryCount();
}

Log start
事务处理之前
查看账户方法...
事务处理之后
Log end
四、总结
其实可以用代理类可以用继承或实现接口两种方式达到代理的效果,但是当多个代理类需要相互组合的时候,继承就不灵活了,需要不断重写代理类,而实现接口的方式就十分容易通过的聚合实现代理类之间的组合。

    
 
 

您可能感兴趣的文章:

  • java代理 jdk动态代理应用案列
  • 请问各位高手,如何用JAVA编一个代理服务器。
  • 如何用Java做代理,在线等待!!
  • Java类动态代理框架 Smartproxy
  • Java 的 MQTT 代理 Moquette-mqtt
  • Java的HTTP代理服务器 Smart Cache
  • Java动态代理 CGLib
  • 如何代理SUN 的JAVA认证和考试,DJLIHAO@SINA.COM,请将相关协议发到此信箱。500分,在线等
  • 如何代理SUN 的JAVA认证和考试,DJLIHAO@SINA.COM,请将相关协议发到此信箱。500分,在线等
  • 如何代理SUN 的JAVA认证和考试,DJLIHAO@SINA.COM,请将相关协议发到此信箱。500分,在线等
  • 用java开发一个基于Proxy(代理)的网络计费系统。有兴趣的来讨论讨论
  • java代理模式与动态代理模式详解
  • 通用 Java 监控代理 Zorka
  • 代理角色java设计模式之静态代理详细介绍
  • 和Java版高手在线讨论代理服务器的问题,讨论者都有分。
  • java实现动态代理示例分享
  • java动态代理和cglib动态代理示例分享
  • Java动态代理实现AOP
  • java实现动态代理方法浅析
  • java动态代理示例分享
  • java有无像vb那样的静态变量?java的staic是类的属性,那末,静态变量如何声明?
  • Java 静态分析工具 JArchitect
  • 请教:java中如何调用linux下的静态连接库.a文件?
  • 请教:java中如何调用linux下的静态连接库.a文件?
  • 如何用JAVA实现访问静态页面上的……
  • java用静态工厂代替构造函数使用方法和优缺点
  • 请教:java中如何调用linux下的静态连接库.a文件?
  • JAVA中使用双括号来初始化静态常量的小技巧
  • 大家快来帮帮我,关于JAVA的类变量:一定在定义成STATIC变量(即静态变量)吗?
  • 关于静态方法的一些问题(各位救命啊,关于一个项目用java还是delphi来做的)
  • 浅谈java中静态方法的重写问题详解
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 想深入学习Java应该学习哪些东西
  • 深入理解Java对象实例生成的例子
  • java父类和子类初始化顺序的深入理解
  • 深入分析Java内存区域的使用详解
  • 基于Java Tomcat和激活MyEclips的深入理解
  • java/word+fusionchart生成图表深入分析
  • 深入理解:Java是类型安全的语言,而C++是非类型安全的语言
  • Java接口和抽象类的区别深入剖析
  • 深入JAVA对象深度克隆的详解
  • 深入Java不可变类型的详解
  • 深入java对象复制的分析
  • 深入探讨java的接口和抽象的内涵!
  • 基于Java实现缓存Cache的深入分析
  • java加密枝术深入理解
  • 深入探讨java的接口和抽象的内涵!(续上贴,上贴分已给)
  • 基于Java protected的深入理解
  • 深入Ajax代理的Java Servlet的实现详解
  • 虚函数与纯虚函数(C++与Java虚函数的区别)的深入分析
  • 一个头疼的问题,请对java多态性有深入了解的高手给予关注
  • 深入解析java中的locale
  • java命名空间java.sql类types的类成员方法: java_object定义及介绍
  • 我想学JAVA ,是买THINK IN JAVA 还是JAVA2核心技术:卷1 好???
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: imageflavor定义及介绍
  • 请问Java高手,Java的优势在那里??,Java主要适合于开发哪类应用程序
  • java命名空间java.lang.management类managementfactory的类成员方法: getcompilationmxbean定义及介绍
  • 如何将java.util.Date转化为java.sql.Date?数据库中Date类型对应于java的哪个Date呢
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getlibrarypath定义及介绍
  • 谁有电子版的《Java编程思想第二版(Thinking in java second)》和《Java2编程详解(special edition java2)》?得到给分
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getstarttime定义及介绍
  • 本人想学java,请问java程序员的待遇如何,和java主要有几个比较强的方向
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: stringflavor定义及介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3