`
student_lp
  • 浏览: 432015 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java反射机制(2)反射应用

阅读更多

       在上一篇详细讲解了反射的实现基础,这主要是反射在java 编程中应用非常广泛。例如我们熟知的struts、spring等框架,以及我们后续还要讲到的IoC(控制反转)、AOP(面向切面变成)等理论,这些都是建立在java反射的基础之上的,所以反射非常重要。

    除了上面提到的这些框架,其实我们自己在编写程序的过程中,也经常会用到反射技术。通过反射,可以解决很多问题,也使得我们的代码更加优雅。下面的章节,就为大家介绍两个应用,分别是:动态代理和工厂设计模式。不过在讲动态代理之前,我们还是有必要先复习一下java类的生命周期。

一、java类的生命周期

      在一个类编译完成之后,下一步就要开始使用类,如果要使用一个类,肯定离不开JVM。在程序执行中JVM通过装载、链接、初始化3个步骤完成,类的装载就是通过类加载器把.class二进制文件装入JVM的方法区,并在堆栈创建描述该类的Class对象,用来封装数据。需要注意的是,同一个类只会被JVM加载一次。链接就是把二进制数据封装成可以运行的状态。

     链接分为校验、准备和解析3个步骤。校验用来确认此二进制文件是否适合当前的JVM;准备就是为静态成员分配内存空间,并设置默认值;解析指的是转换常量池的代码引用为直接引用的过程,直到所有的符号引用都可以被运行程序使用(建立完整的对应关系)。完成之后,类型即可初始化,初始化之后类的对象就可以正常的使用,直到一个对象不再使用之后,将被垃圾回收,释放内存空间。当没有任何引用执行class对象时即会被卸载,结束类的生命周期,所以所讲解的生命周期如下图:

二、动态代理详解

      在java中想要实现动态代理机制,需要java.lang.reflect.InvocationHandler接口和java.lang.reflect.Proxy类的支持。其中InvocationHandler接口定义如下:

    public interface InvocationHandler{

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

    }

    在此接口中之定义了一个invoke()方法,此方法中有3个参数,其参数的含义如下:

  •      Object  proxy----被代理的对象;
  •      Method  method---要调用的方法;
  •      Object args[] ----方法调用所需要的参数;

    Proxy类时专门完成代理的操作类,可以通过此类为一个或多个接口动态生成实现类。Proxy类提供了如下的操作方法:

    public  static  Object  newProxyInstance(ClassLoader  loader,Class<?>[]  interfaces,InvocationHandler  h)throws IllegalArgumentException。

    通过newProxyInstance()方法可以动态生成实现类,在此方法中的参数含义如下:

  •     ClassLoader loader----类加载器;
  •     Class<?>[]   interfaces-----得到全部的接口;
  •     InvocationHandler h----得到InvocationHandler接口的子类实例。

注意:类加载器。在Proxy类的newProxyInstance()方法中需要一个ClassLoader类的实例,ClassLoader实际上对应的是加载器,在java中主要有以下3种类加载器。

  •     Bootstrap  classLoader-----此加载器采用C++编写,一般开发中是看不到的。
  •     Extension  ClassLoader-----用来进行扩展类的加载,一般对应的是jre\lib\ext目录中的类。
  •     AppClassLoader ---加载classpath指定的类,是最常用的一种加载器。

      ①如果要完成动态代理,首先要定义一个InvocationHandler接口的子类,已完成代理的具体操作。实例如下:


       在上面的类中bind()方法中接受被代理对象的真是主体实现,之后复写InvocationHandler接口中的invoke()方法,完成具体的方法调用。

     ②定义接口

     ③实现定义的接口

      以上定义了接口以及它的实现类,这样在操作时直接将真实主题类的对象传入到MyInvocationHandler类的bind()方法中即可。

     ④调用动态代理

   从程序的运行接口来看,和静态代理操作没有什么不同。但是这一般在开发中很少使用到这种动态代理机制,但是在编写一些底层代码或使用一些框架(如Spring)时这种动态代理模式就比较常用了。

三、初探工厂模式编程

       工厂设计模式在实际开发过程中使用的非常多,例如通过简单的工厂设计模式就可以达到解耦的目的。普通的工厂模式,每增加一个子类都需要修改工厂类,这非常麻烦。但是通过反射机制,可以显著的改善工厂类,让其在添加子类时可以不用做任何修改,就可以达到功能的扩充。下面是一个工厂模式的实例:



 上面的工厂类中使用了反射,这样无论添加多少个子类,工厂类都不用进行任何修改。这是一个简单的实例,给大家一个思路。有关java的编程模式,会在后面的章节中具体介绍。请继续关注。

 

 

  • 大小: 19.7 KB
  • 大小: 62.7 KB
  • 大小: 18.3 KB
  • 大小: 25.7 KB
  • 大小: 39.8 KB
  • 大小: 56.5 KB
  • 大小: 44 KB
分享到:
评论

相关推荐

    JAVA反射机制应用

    JAVA反射机制应用 JAVA反射机制是JAVA语言中的一种动态机制,它能够在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法。这种动态获取的信息以及动态...

    java反射机制应用

    java反射机制应用,文档中列举了使用java反射机制的各个应用场景,加以代码实例,使用学习非常方便。

    JAVA 反射机制应用

    Java反射机制是Java语言提供的一种强大功能,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类是java.lang.Class,它代表了运行时的类信息。通过Class对象,我们...

    java反射机制详解与应用.pdf

    * Struts2 框架:使用 Java 反射机制来实现动态加载类别和实现依赖注入。 * Spring 框架:使用 Java 反射机制来实现依赖注入和面向方面编程。 * Hibernate 框架:使用 Java 反射机制来实现动态代理和实现依赖注入。 ...

    java 反射机制详解

    Java 反射机制是 Java 语言中的一个重要特性,它允许程序在运行时动态地获取类的信息(如类名、属性、方法等)并调用对象的方法,甚至修改对象的状态。这一机制极大地增强了 Java 程序的灵活性和可扩展性,尤其是在...

    Java反射机制的实现_Reflection

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、对象等的内部信息。通过Java反射机制,开发者可以在不知道具体类名的情况下创建对象,调用方法,访问和修改私有成员变量,以及...

    候捷谈Java反射机制

    Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时获取和操作任何已知名称的类的内部信息。这一机制使得Java具备了一定的动态性,虽然在传统的分类中Java被视为静态类型语言。通过反射,开发者可以在...

    JAVA反射机制及应用例子

    JAVA反射机制及应用例子.。。Reflection API

    Java反射机制学习(二)

    这篇博文"Java反射机制学习(二)"可能深入探讨了如何利用反射进行动态类型处理、访问私有成员以及创建对象等核心概念。在这里,我们将详细讨论Java反射的基本用法及其在实际开发中的应用。 1. **什么是反射**: ...

    JAVA反射机制的入门代码

    Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理元数据、创建对象、调用私有方法...

    Java 反射机制 代码的实例

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、对象等的内部结构。通过反射,开发者可以动态地获取类的信息并调用其方法,创建对象,访问私有成员,甚至改变类的行为。在深入...

    一个例子让你了解Java反射机制

    Java反射机制是Java编程语言中的一个重要特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类集中...在实践中学习,你会更好地理解Java反射机制的威力和应用场景。

    北大青鸟java反射机制

    此外,Java反射机制也广泛应用于注解处理。`Annotation`接口代表了类、方法、字段等上的注解。我们可以使用`isAnnotationPresent(Class&lt;? extends Annotation&gt; annotationClass)`检查是否存在特定注解,`...

    java的反射机制及其实际应用

    Java中,反射是一种强大的工具。它使您能够创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代表链接。反射允许我们在编写与执行时,使我们的程序代码能够接入装载到JVM中的类的内部信息,而不是源...

    java反射机制工具类

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和方法的信息。这个特性使得Java具备了高度的灵活性,能够在运行时动态地发现和使用类的属性和方法,即使这些信息在编译时...

    java反射机制原理和反射机制总结

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段以及方法等对象。这一机制的核心在于`java.lang.Class`类和相关的API,它们提供了对类元数据的访问,使得我们能够在运行时...

    Java反射机制经典案例

    Java反射机制是Java编程语言中的一个强大...通过以上介绍,我们了解了Java反射机制的基本概念、使用方法、应用场景以及需要注意的问题。在实际编程中,合理利用反射可以提高代码的灵活性,但同时也需注意其潜在的风险。

    java反射机制讲解

    Java反射机制是Java语言提供的一种强大的能力,它允许我们在运行时检查类的信息并动态地创建和操作对象。这种机制使得程序具有更高的灵活性和扩展性,尤其是在框架开发中有着广泛的应用。 首先,我们要理解反射的...

    应用java反射机制打印一个对象.docx

    Java 反射机制在对象打印中的应用 Java 反射机制是 Java 语言中的一种强大工具,允许程序在运行时检查和修改对象的行为。下面我们将讨论如何使用 Java 反射机制来打印一个对象的所有属性值。 Java 反射机制的概念 ...

    利用java反射机制的建议计算器源码

    Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的动态性和灵活性。在这个“利用java反射机制的建议计算器源码”中...

Global site tag (gtag.js) - Google Analytics