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

不知好歹92

不知好歹92

2016-02-19 11:35

有一种朋友不在生活里,却在生命力;有一种陪伴不在身边,却在心间。图老师即在大家的生活中又在身边。这么贴心的服务你感受到了吗?话不多说下面就和大家分享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
四、总结
其实可以用代理类可以用继承或实现接口两种方式达到代理的效果,但是当多个代理类需要相互组合的时候,继承就不灵活了,需要不断重写代理类,而实现接口的方式就十分容易通过的聚合实现代理类之间的组合。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

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

编程语言 网络编程
java 静态代理 动态代理深入学习

代理模式之Java动态代理实现方法

编程语言 网络编程
代理模式之Java动态代理实现方法

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Java动态代理实现AOP

Java JAVA基础
Java动态代理实现AOP

java代理 jdk动态代理应用案列

编程语言 网络编程
java代理 jdk动态代理应用案列

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

代理角色java设计模式之静态代理详细介绍

编程语言 网络编程
代理角色java设计模式之静态代理详细介绍

关于动态代理

编程语言 网络编程
关于动态代理

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Mac启动快捷键功能汇总

Mac启动快捷键功能汇总

java/word+fusionchart生成图表深入分析

java/word+fusionchart生成图表深入分析
下拉加载更多内容 ↓