`
wsql
  • 浏览: 11777046 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Java动态代理学习1——静态代理

 
阅读更多

一、代理模式


代理模式是常用的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设计模式——代理设计模式(静态代理和动态代理)

    Java设计模式——代理设计模式(静态代理和动态代理) 各种情况例子源码

    java 设计模式 静态代理模式

    ———————————————————————————————— package liang; public class ReallSubject extends Subject //真实角色 { public void requst() { System.out.println("From real ...

    【白雪红叶】JAVA学习技术栈梳理思维导图.xmind

    关于java程序员发展需要学习的路线整理集合 技术 应用技术 计算机基础知识 cpu mem disk net 线程,进程 第三方库 poi Jsoup zxing Gson 数据结构 树 栈 链表 队列 图 操作系统 linux 代码控制...

    Java典型模块

    第1篇 Java开发必备基础 第1章 搭建Java开发环境 1.1 Java的过去、现在和未来 1.1.1 Java的历史 1.1.2 Java的语言特点 1.1.3 Java API简介 1.1.4 Java未来发展 1.2 Java程序设计环境 1.2.1 命令行工具——JDK 6.0 ...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷1

    静态图——类图、对象图、包图 uml/component.mdl //04.实现图——组件图与部署图 uml/statechart.mdl //05.行为图——状态图 uml/activity.mdl //06.行为图——活动图 uml/sequence.mdl //07.交互图——...

    Java JDK实例宝典

    第1章 Java基础 1.1 转换基本数据类型 1.2 Java的运算符 1.3 控制程序的流程 1.4 计算阶乘 1.5 实现命令行程序 第2章 Java面向对象程序设计 2. 1 复数类 2. 2 equals.chashCode...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷9

    静态图——类图、对象图、包图 uml/component.mdl //04.实现图——组件图与部署图 uml/statechart.mdl //05.行为图——状态图 uml/activity.mdl //06.行为图——活动图 uml/sequence.mdl //07.交互图——序列图 uml/...

    geekwalk:用Java写个简易版Nginx

    Geekwalk——目标是用Java实现精巧且带UI的反向代理服务器 标题有两重含义: 这是一个我用业余时间,慢慢打磨的项目,几乎所有的编程工作都会以B站 / 的形式共享出来,所以你会看到一个程序员亦步亦趋编写代码的全...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷8

    静态图——类图、对象图、包图 uml/component.mdl //04.实现图——组件图与部署图 uml/statechart.mdl //05.行为图——状态图 uml/activity.mdl //06.行为图——活动图 uml/sequence.mdl //07.交互图——序列图 uml/...

    Java Web程序设计教程

    12.1.3java动态代理与aop 244 12.1.4springaop简介 245 12.2使用spring的通知 246 12.2.1beforeadvice 246 12.2.2afterreturningadvice 248 12.2.3methodinterceptor 249 12.2.4throwadvice 250 12.3使用...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷3

    静态图——类图、对象图、包图 uml/component.mdl //04.实现图——组件图与部署图 uml/statechart.mdl //05.行为图——状态图 uml/activity.mdl //06.行为图——活动图 uml/sequence.mdl //07.交互图——...

    07spring4_staticproxy.rar

    静态代理的角色分析: 抽象角色——一般使用接口或者抽象类来实现。 真实角色——被代理的角色 代理角色——代理真实角色—代理真实角色后一般会做一些附属操作。 客户——使用代理角色来进行一些操作 Client....

    【Java面试系列】Nginx.pdf

    为什么要用Nginx? 为什么Nginx性能这么高? Nginx 是如何实现高并发的? Nginx怎么处理请求的? Nginx的工作流程 给 favicon.ico 和 robots.txt 设置过期时间; 这里为 favicon.ico 为 99 天,...———————————

    java高手真经 (UML建模+设计模式+面向服务架构) 卷10

    静态图——类图、对象图、包图 uml/component.mdl //04.实现图——组件图与部署图 uml/statechart.mdl //05.行为图——状态图 uml/activity.mdl //06.行为图——活动图 uml/sequence.mdl //07.交互图——序列图 uml/...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷5

    静态图——类图、对象图、包图 uml/component.mdl //04.实现图——组件图与部署图 uml/statechart.mdl //05.行为图——状态图 uml/activity.mdl //06.行为图——活动图 uml/sequence.mdl //07.交互图——序列图 uml/...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷6

    静态图——类图、对象图、包图 uml/component.mdl //04.实现图——组件图与部署图 uml/statechart.mdl //05.行为图——状态图 uml/activity.mdl //06.行为图——活动图 uml/sequence.mdl //07.交互图——序列图 uml/...

    java高手真经 (UML建模+设计模式+面向服务架构) 卷2

    静态图——类图、对象图、包图 uml/component.mdl //04.实现图——组件图与部署图 uml/statechart.mdl //05.行为图——状态图 uml/activity.mdl //06.行为图——活动图 uml/sequence.mdl //07.交互图——...

Global site tag (gtag.js) - Google Analytics