打字猴:1.700461166e+09
1700461166
1700461167
1700461168
1700461169
1700461170 图12-9 动态代理调用过程示意图
1700461171
1700461172 读者可能注意到我们以上的代码还有更进一步的扩展余地,注意看DynamicProxy类,它是一个通用类,不具有业务意义,如果我们再产生一个实现类是不是就很有意义了呢?如代码清单12-31所示。
1700461173
1700461174 代码清单12-31 具体业务的动态代理
1700461175
1700461176 public class SubjectDynamicProxy extends DynamicProxy{
1700461177
1700461178 public static<T>T newProxyInstance(Subject subject){
1700461179
1700461180 //获得ClassLoader
1700461181
1700461182 ClassLoader loader=subject.getClass().getClassLoader();
1700461183
1700461184 //获得接口数组
1700461185
1700461186 Class<?>[]classes=subject.getClass().getInterfaces();
1700461187
1700461188 //获得handler
1700461189
1700461190 InvocationHandler handler=new MyInvocationHandler(subject);
1700461191
1700461192 return newProxyInstance(loader,classes,handler);
1700461193
1700461194 }
1700461195
1700461196 }
1700461197
1700461198 如此扩展以后,高层模块对代理的访问会更加简单,如代码清单12-32所示。
1700461199
1700461200 代码清单12-32 场景类
1700461201
1700461202 public class Client{
1700461203
1700461204 public static void main(String[]args){
1700461205
1700461206 //定义一个主题
1700461207
1700461208 Subject subject=new RealSubject();
1700461209
1700461210 //定义主题的代理
1700461211
1700461212 Subject proxy=SubjectDynamicProxy.newProxyInstance(subject);
1700461213
1700461214 //代理的行为
1700461215
[ 上一页 ]  [ :1.700461166e+09 ]  [ 下一页 ]