黑马程序员——Java高新技术代理

代理

普通代理

很多时候,我们使用别人代码往往会发现别人代码的功能并不是十分符合我们的需求,调用别人的方法的时候,总是先new一个对象,然后我们的前处理做完,然后调用别人代码的方法,再加入后处理,这样做往往十分麻烦。代理就为其他类提供了一种控制其对象的方法。代理类和委托类必须实现同一个接口,这样代理类才能在需要的时候代替委托类对象,执行委托类的方法。

interface Solution{

public void doSomething();

}

//委托类Demo实现了接口

class Demo implements Solution{

public void doSomething() {

System .out.println( "do
something");      }

}

//代理类实现了委托了一样的接口

class ProxyDemo implements Solution{

private Demo demo ;

private ProxyDemo(){};

//委托类的对象成为代理类的内在属性

public ProxyDemo( Demo
demo){this .demo =demo ;}

public void doSomething() {

System .out.println( "————前处理————" );

demo. doSomething();

System .out.println( "————后处理————" );

}}

public class ProxyTest {

public static void main (String[] args) {

Solution
solution=new ProxyDemo(new Demo());

solution.doSomething ();

}

}//运行结果

/*————前处理————

do
something

————后处理————*/

动态代理

使用代理后,无论是调用Demo还是ProxyDemo都可以达到使用doSomething方法的目的,而且ProxyDemo还提供了一些额外的功能,提高了功能的扩展性,使程序更灵活。但是上例中,使用代理必须明确委托类和方法,扩展性不够。动态代理可以在未知委托类和方法的时候就写好程序,见招拆招,运行时才确定类,提高扩展性。

interface Solution{

public void doSomething();

}

//委托类Demo实现了接口

class Demo implements Solution{

public void doSomething() {

System .out.println( "do
something");      }

}

//动态代理

class ProxyDemo2 implements InvocationHandler {

//不确定委托类,使用接口引用

private Solution obj ;

private ProxyDemo2 (){}

public ProxyDemo2( Solution
obj ){this .obj =obj ;}

public Object
invoke( Object
proxy, Method
method, Object [] args )

throws Throwable {

// TODO Auto-generated
method stub

System . out. println( "————前处理2————" );

obj. doSomething ();

System . out. println( "————后处理2————" );

return null ;

}

}

public class ProxyTest {

public static void main ( String[] args ) {

Demo
demo =new Demo ();

Class cla =demo .getClass ();

InvocationHandler
handle =new ProxyDemo2 (demo );

//动态代理就是在运行的时候才确立的类。见招拆招

Solution
solution2 =( Solution )Proxy .newProxyInstance

( cla. getClassLoader() ,cla .getInterfaces (), handle );

solution2 .doSomething ();

}

} //运行结果

/*

————前处理2————

do
something

————后处理2————

*/

动态代理有一个核心接口InvocationHandler,里面只有一个方法,用于封装实际类的方法。和一个工具类Proxy可以为你建立一个委托类的实例。

黑马程序员——Java高新技术代理,布布扣,bubuko.com

时间: 2024-10-25 18:51:14

黑马程序员——Java高新技术代理的相关文章

黑马程序员——java高新技术(新特性、反射、泛型)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- java高新技术 第一部分——JDK1.5新特性 1.增强for循环 格式: for(元素类型 变量名 : Collection集合 & 数组 ) { }//增强for循环括号里写两个参数,第一个是声明一个变量,第二个就是需要迭代的容器 高级for循环和传统for循环的区别: 高级for循环在使用时,必须要明确被遍历的目标.这个目标,可以是Collection集合或者数组,如果遍历Collec

黑马程序员——Java高新技术——反射机制

点击打开链接 点击打开链接 点击打开链接 android培训.<a">点击打开链接 点击打开链接 java培训.期待与您交流!">点击打开链接 点击打开链接 反射的基石--Class类 Java程序中的各个java类属于同一类事物,描述这类事物的java类名就是Class. Class类没有构造函数,不能new对象.怎么得到Class类的实例,有3中方法: ①类名.Class    Class  c1=Date.class; ②对象.getClass 获取对象所属的字

黑马程序员——Java高新技术——反射的复写

由于第一段视频学习效果不理想,希望重新看一遍反射视频,并多方面寻找资料,重新写一遍总结,以期java能力早日提高. Java——反射 一.Class类 Class 类的实例表示正在运行的 Java 应用程序中的类和接口.所以,Class可以提供方法获得动态的java类中的各个属性: (由定义可以知道Class创建的思路就是获得某一个特定java类的信息然后传给Class的对象,那么具体怎么做呢?) 这里说得java类的信息指的就是该java类的计算机的字节码:传给 Class cls1: 所以有

黑马程序员----Java高新技术之反射学习总结

------- android培训.java培训.期待与您交流! ---------- 反射的概念. 1.Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类中的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 精妙的总结就是:反射就是将Java类中的各个成分映射成相应的Java类. 3.在Java中,描述事物的各种类同样也是一种事物,也可以用面向对象的方法来描述,即也有一个类来描述众多的J

黑马程序员——java高新技术——网络编程

点击打开链接 点击打开链接 点击打开链接 android培训.<a">点击打开链接 点击打开链接 java培训.期待与您交流!">点击打开链接 点击打开链接 网络编程 网络模型 l   OSI参考模型 l   TCP/IP参考模型 网络通讯要素 l   IP地址:网络中设备的标识,不易记忆,可用主机名,本地回环地址,127.0.0.1  主机名:localhost l   端口号:用于标识进程的逻辑地址,不同进程的标识,有效端口:0~65535,其中0~1024系统使

黑马程序员——JAVA高新技术——反射

----------android培训.java培训.java学习型技术博客.期待与您交流!------------ 一.对于反射的概念 对于JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. JAVA反射(放射)机制:"程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言".从这个观点看,Perl,Python,Ruby

黑马程序员——java高新技术——IO其他流对象

点击打开链接 点击打开链接 点击打开链接 android培训.<a">点击打开链接 点击打开链接 java培训.期待与您交流!">点击打开链接 点击打开链接 IO其他对象 PrintStream:字节打印流.为其他输出流添加了功能,提供了打印方法,可以将各种数据类型的数据原样打印. 构造函数可以接受的参数类型:file对象,字符串路径,字节输出流. 方法:println():打印各种基本数据类型. PrintWrite:字符打印流.构造函数可以接受的参数类型:file

黑马程序员_Java高新技术

1  JDK5的新特性 1.1 静态导入       在API中那些不需要new对象的类,可以在类文件的开头,import static java.lang.Math.*;这里把Math中的所有的静态方法都导入了,在类中不需要调用Math类就能直接用Math的方法了 package cn.wjd.staticimport; import static java.lang.Math.*; public class StaticImport { public static void main(Str

黑马程序员_高新技术_1_Java反射

------- android培训.java培训.期待与您交流! ---------- 0.反射知识体系 下图为反射整体的知识体系,把握住此图也就全局上掌握住反射所有内容. 1.反射概论 1)反射概念 其实字面上可以这么理解反射,平时使用类时都是由类new出对象,而反射则是通过对象"反射"出类的信息,好比一个人照镜子可以看到人类的特征,而看出机制就是镜子反射. 2)Java对象两种类型 Java程序中的许多对象在运行时会出现两种类型:编译时类型和运行时类型.如下代码: Person p