`

java反射机制---方法的反射

阅读更多
前段时间我在使用hibernate的时候突然想到一个问题:我经常要对数据库中某条记录中的某个字段读取后进行判断,一般正规的操作流程是先使用session.get方法读取这条记录,并将其保存进一个hibernate实体中,然后从实体中获取我所需要的字段进行比较。
   但是如果操作实在是繁琐,于是我在想如何能写一个通用方法,可以直接读取我所需某个表中的某个字段。但是当初尝试了几种方法都无法实现。最麻烦的地方是,因为我在调用该方法前该方法是不知道我需要实现的实体是哪个,也不知道获取的字段是哪个,也就是说程序需要动态的调用某个类和某个方法。后面由于工作比较紧张这个问题就搁置下来了。
   就在昨天我了解了下java的反射机制,它能够将传统的编译时所做的工作放到运行时处理。利用这个技术我发现可以很容易的解决我当初那个问题。
   我举个例子:假如我要通过hibernate从user表中读取name字段,传统做法是
   //......
   User user = session.get(User.class,user.getId());
   String name =user.getName();
   //.......
   这样做的麻烦在于如果我要读取Class表中的ClassName字段的话,那所有的代码都得从写,代码的复用率就很低了。
   现在我们采用java的反射技术写一个通用方法来解决这个问题
   //.....
   /**
     * @param clazz类,serializable主键,methodName方法名
     * @return 字段的值
     * @throws Exception
     */
  public Object findHQLByField(Class clazz,Serializable serializable,String methodName) throws Exception {
   Object obj=null;
   obj=sesson.get(clazz,serializable);
  
   Method method=obj.getClass().getMethod(methodName, null);
   return method.invoke(obj, null);

  }
  //......
  String name = (String)findHQLByField(User.class,user.getId(),"getName");
   通过findHQLByField这个通用方法,我们可以很方便的获取到某个记录的具体字段,而且当要更换实体和字段时只要替换方法参数就行了。
   当然java的反射技术非常强大,这只是非常简单的一个实现而已。我们也可以举一反三,比如我要动态执行某个类的方法时就可以这么做:
  //.....
   Object obj = Class.forName("User").newInstance();//要实现newInstance方法的类必须有默认的构造函数        

   Method method=obj.getClass().getMethod("getName", null);//第一个参数是方法名第二个参数是方法参数的类型
  
   return method.invoke(obj, null);//第一个参数是实例,第二个参数是方法的参数值
  //.....
  这样做的效果和
  new User().getName();
  是一样的。
  如果要开发一个具有高度伸缩性的程序,java反射技术是必不可少的。它能将一些不可能的事变为可能。当然,java反射机制也有它的缺点,最大的缺点也是它的功能太强大了,可以修改被定义为private的属性,同时也破坏了java的面向对象的性质。因此在使用中还是需要慎重的。
分享到:
评论

相关推荐

    实战java反射机制-让你迅速认识java强大的反射机制

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和方法的信息,甚至动态地创建对象并调用其方法。通过反射,开发者可以实现高度灵活和动态的代码,这对于框架开发、元编程...

    java面试题--反射机制

    ### Java反射机制详解 #### 一、引言 在Java面试中,经常会出现与反射机制相关的题目。这是因为Java反射机制不仅是Java语言的一项重要特性,也是理解Java动态特性的关键所在。通过本文,我们将深入探讨Java反射...

    Java反射机制-侯捷观点

    Java反射机制是Java编程语言中的一个重要特性,它赋予了程序在运行时检查和操作类、接口、字段和方法的能力。这种动态类型的行为使得Java在某种程度上具有了类似于Perl、Python和Ruby等动态语言的灵活性。 Java反射...

    java(教学0)韩建雷java反射机制-relea.ppt

    java(教学0)韩建雷java反射机制-relea.ppt

    Java反射机制-较全面PPT

    Java反射机制,比较简洁但是还是挺有用的,较全面PPT

    Java反射机制-PDF文档,详述了反射机制的原理和使用方法

    下面我们将详细探讨Java反射机制的原理和使用方法。 首先,理解反射机制的原理。在Java中,当编译器编译源代码时,它会将类的信息存储在Class文件中,包括类名、方法、字段等。在程序运行时,Java虚拟机(JVM)加载...

    反射实例-JAVA反射机制

    ### 反射实例—JAVA反射机制 #### 一、反射概念及原理 反射在计算机科学领域,特别是程序设计中,是指程序有能力访问、检测和修改其自身的结构和行为。这一概念最早由Smith于1982年提出,并迅速应用于各种编程语言...

    Java 反射机制 - v1.0.pdf

    Java 反射机制可以让我们在编译期(Compile Time)之外的运行期(Runtime)检查类,接口,变量以及方法的信 息。反射还可以让我们在运行期实例化对象,调用方法,通过调用 get/set 方法获取变量的值。

    java-反射机制-源码

    Java反射机制是Java编程语言中的一个强大工具,它允许运行时动态访问类的信息,包括类名、属性、方法以及构造器等。通过反射,我们可以在程序执行过程中创建和操作任何类的对象,即使在编译时未知其具体类型。这种...

    反射实例-JAVA反射机制.doc

    Java 反射机制是 Java 语言提供的一种强大的工具,它允许程序在运行时动态地获取类的信息(如类名、属性、方法等)并进行操作。这种能力使得 Java 应用程序更加灵活,能够在运行时发现和修改自身的行为。然而,反射...

    java反射机制.zip

    java反射机制java反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制...

    精华java-反射机制-reflection-完整例子-具体说明-工程实际(完整版).doc

    Java反射机制是Java语言提供的一种强大的工具,它允许程序在运行时检查类、接口、字段和方法的信息,甚至能够在运行时动态地创建和修改对象。本文将深入探讨反射机制的概念、用途、优缺点以及如何使用反射来获取类的...

    pdf反射机制-java

    Java反射机制是Java编程语言中的一个核心特性,它允许运行中的程序访问并操作类和对象的信息,包括类的私有属性、方法以及构造器等,即使这些信息在编译时并未明确知晓。这一机制为Java提供了强大的动态性,极大地...

    反射实例-JAVA反射机制.pdf

    反射实例-JAVA反射机制

    Java反射机制 Java反射机制

    Java反射机制的主要作用包括:获取类的所有属性和方法、构造动态实例、调用类的方法等。通过反射,程序可以动态地创建对象和调用其方法,从而实现更灵活的功能。 #### 二、Java反射机制的由来与发展 Java反射机制...

    JAVA基础--JAVA中的反射机制详解

    JAVA 反射机制是 Java 语言中的一种动态获取信息和动态调用对象方法的功能。它允许程序在运行时获取类的信息、构造对象、获取成员变量和方法、调用对象的方法等。 Java 反射机制主要提供了以下功能: 1. 在运行时...

    java反射机制.md

    深入了解java反射机制的原理,通过反射机制可以破坏单例模式,如何防止通过反射机制拿到单例模式的构造器呢?用枚举类可破

    java反射规范--java资源

    Java反射提供了一种强大的机制来处理类和对象,使得程序能够在运行时动态地获取类的信息并对其进行操作。虽然反射提供了一些非常有用的特性,但也存在一些潜在的问题,比如性能开销较大、安全性问题等。因此,在使用...

Global site tag (gtag.js) - Google Analytics