发表于: 2017-09-06 23:15:49

4 935


一、    今天完成的事情

1)        设计模式——代理模式

1) 概述

代理模式是指,为其它对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象的访问,而代理对象可以在客户类和目标对象之间起到中介的作用。

也就是说,使用代理对象,是为了在不修改目标对象的基础上,增强主业务逻辑。

客户类真正想要访问的对象是目标对象,但客户类真正可以访问的对象是代理对象。

打个比方:打官司时一般人会请律师来辩护,这里律师便是代理对象,人则是目标对象。

根据代理关系建立的时间不同,代理分为两类:静态代理和动态代理。

2) 静态代理

静态代理是指,代理类在程序运行前就定义好的。

现有目标类SomeServiceImpl

SomeServiceImpl类实现了SomeService接口,现在我们需要改造它的doFirst方法,要求不再原来的方法上进行更改,这时可以使用静态代理。

重新编写一个代理类SomeServiceProxy,这个代理类要实现代理模式有如下要求:

目标对象与代理对象实现同一接口或继承同一个类;

代理对象中要有目标对象的引用;

对需要改造的方法进行改造,对不需要改造的方法则调用原来的。

以下是实现代码:

观察代码可以发现,ISomerService为同一接口,通过无参构造函数获取了引用,对doFirst进行了改造,doSecond方法则调用原来的,符合上述的要求。

3) 动态代理——通过jdk实现

动态代理是指,目标对象的代理对象是临时生成的,其代理类与目标类的关系再程序运行时才确立。

依旧是刚才的问题,这次使用动态代理来解决。

使用JDKproxy动态代理,要求目标类必须实现接口(ISomeService接口)

以下是代码实现:

4) 动态代理——通过cglib实现

通过jdk的动态代理要求目标对象必须有实现的接口,那么对于没有实现接口的目标类呢?

答:通过cglib实现。

首先,代理对象中要有目标对象的引用

其次,定义代理的生成方法,返回:目标对象类型

最后,要有回调函数提供给Enhancer类调用,在回调函数里面改造方法:

二、    明天计划的事情

1)调整好状态,学习

三、    遇到的问题

1)明天要回校了,今天一直在收拾东西,状态不佳

四、    收获

1)总算有点弄懂了代理模式



返回列表 返回列表
评论

    分享到