反射标签存档

Java动态代理

  从JDK1.3开始,Java就引入了动态代理的概念。动态代理(Dynamic Proxy)可以帮助你减少代码行数,真正提高代码的可复用度。例如,你不必为所有的类的方法里面都写上相同的Log代码行,取而代之的是实用类的动态代理类。当然,这种便利是有条件的。   在JDK1.3以前,代理模式就已流行,所以得代理模式是生成一个和类相同接口的代理类,用户通过使用代理类来封装某个实现类。其目的是加强实现类的某个方法的功能,而不必改变原有的源代码。代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。   代理模式一般涉及到的角色有: 抽象角色:声明真实对象和代理对象的共同接口; 代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。 真实角色:代理角色所代表的真实对象,是我们最终要引用的对象。   随着Pr...

java反射机制(PDF)

  之前我也写过几篇关于java反射的文章,读完这几篇文章后,对java的反射机制应该有了基本的了解,当然也可以使用java反射进行开发。不过比起今天要介绍的这本书来说,这几篇文章就显的微不足道了。   今天要给大家介绍的这本书是来自候捷老师的《Java反射机制》。看上去将其叫为文档更为合适,因为本书仅有短短15页,不过已经很好地阐述了java的反射机制。   本书从Class开始讲起,利用简单的例子,分析说明了Java Classes的组成及对应的 Reflection APIs使用。   如果你对java的反射有兴趣,不仿下载一本。在线阅读

java反射(三)

  之前我们学习了利用 Java 的反射机制,在运行期间生成对象和运行方法。相比较而言,今天的内容要简单很多--运行期间运态为 Field 赋值。   1、在生成对象后,直接访问属性。 import java.lang.reflect.Field;    public class TestField {      public String test;            public static void main(String[] args) {          try {      &...

Java反射(二)

  目前流行的 Perl、Python、Ruby 等都是动态语言,所谓动态是指在程序运行期间可以改变程序结构和变量类型。Java 并不具备这点,所以Java不是动态语言。不过,尽管 Java 不是动态语言,但利用它的 Reflection(反射)机制同样可以在程序运行期间得到 Class 的名称,构造并生成其实例。利用 Reflection 我们可以为 fields(属性)赋值,调用其 method。   在《Java反射(一)》一文中,我们简单了解了利用 Reflection 机制在程序运行期间生成 Class 实例,今天我们仍然简单地了解一下,利用 Reflection 机制为动态调用 method。   Class 对象的 getMethod 方法可以返回该 Class 表示的类(包括父类或接口)所声明的所有公共方法的 Method 数组。它有一个重载方法 getMethod(String name, Class... parameterTypes),该方法返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。name 参数是一个 Strin...

Java反射(一)

  经过这两天的重构,Grape 的内核基本上已经完成了。和大多数 Java 框架一样,Grape 中同样使用了反射机制在运行期间创建对象实例。在此分次为大家简单介绍一下 Java 反射机制的使用。   我们都知道,在 Java 中对象的实例是通过 new 关键字来创建的。不过,这种方法属于硬编码,不易改变,不灵活。比如在程序中硬编码创建的 Employee 对象,若要使用 Manager 来代替它,只能修改代码。Java 的反射机制是使其具有动态特性的非常关键的一种机制,也是在JavaBean 中广泛应用的一种特性。它可以让程序在运行期间加载编译期间不得而知的Class。并可以生成其实例、调用其方法、为其属性赋值。比如著名的 Hibernate 框架中就大量的使用了反射。本文通过简单的例子,简单介绍如何利用反射生成对象实例。   1、利用反射创建对象实例。 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");    上面的代码是否很熟悉?我们经常使用的 JDBC 驱动加载就是使用反射完成的。以上代码...