`

Java反射与内省机制总结

    博客分类:
  • java
阅读更多

一:反射
      1.什么是反射
             反射就是在运行状态把Java 类中的各种成分映射成相应相应的Java 类,可以动态得获取所有的属

性以及动态调用任意一个方法。
             1).一段java代码在程序的运行期间会经历三个阶段:source-->class-->runtime
             2).Class对象
                    在java中用一个Class对象来表示一个java类的class阶段
                    Class对象封装了一个java类定义的成员变量、成员方法、构造方法、包名、类名等。
     2.反射怎么用
          1).获得java类的各个组成部分,首先需要获得代表java类的Class对象
               获得Class对象有以下三种方式:
       
            Class.forname(className)            用于做类加载
                    obj.getClass()                              用于获得对象的类型
                    类名.class                                    用于获得指定的类型,传参用

          2).反射类的构造方法,获得实例
        
      Class clazz = 类名.class;
               Constuctor con = clazz.getConstructor(new Class[]{paramClazz1,paramClazz2,.....});

               con.newInstance(params....);
          3).反射类的成员方法
       
       Method m = clazz.getMethod(methodName,new Class[]{paramClazz1,paramClazz2,.....});

               m.invoke();
          4).反射类的属性
        
      Field field = clazz.getField(fieldName);
               field.setAccessible(true);//设置为可访问
               filed.setObject(value);          //设置值
               Object value = field.get(clazz);      //获得值
               Object staticValue = filed.get(Class);     //获得静态值

              
二:内省
     1.什么是内省
          通过反射的方式操作JavaBean的属性,jdk提供了PropertyDescription类来操作访问JavaBean的属性

,Beantils工具基于此来实现。
      2.内省怎么用
          1).操作一个属性
             
 Object obj = new Object();
               PropertyDescriptor pd = new PropertyDescriptor(propertyName,Class);     //声明属性描


述对象,一次只可描述一个属性
             
 Method m = pd.getWriterMethod();//获取setter方法
               m.invoke(obj,value);
               Method m = pd.getReaderMethod();//获取getter方法
               Object value = m.invoke(obj);

             2).操作多个属性
               BeanInfo bi = Instospector.getBeanInfo(beanClass);//获取Bean描述对象
               PropertyDescriptor[] pds = bi.getPropertyDescriptors();//获取属性描述对象数组
               拿到属性描述对象数组之后再循环数组,剩余的操作就跟"操作一个属性"相同了。

三:两者区别
         反射可以操作各种不同的java类,那么内省只是通过反射来操作JavaBean的。
    
四:应用
          框架就是将开发中大量重复的代码其中起来写个通用的程序,框架是给将来的程序使用的,需要现在

的类调用将来的,所以框架要运行是依赖于将来的类实现的。
          我们只需要针对接口进行调用,将来的类实现接口,那么方法就固定了。但是将来写的类的类名我们

无从得知,这时就需要调用者通过配置文件告诉框架具体的类名。

          将java的反射以及内省机制应用到程序设计中可以大大提高程序的智能化和可扩展性。有很多项目都

是使用这两种技术实现其核心功能的。例如BeanUtils,Struts等。
引自:http://my.oschina.net/mlongbo/blog/77138
分享到:
评论

相关推荐

    Java反射与内省-PPT

    Java反射与内省是Java编程语言中的核心特性,它们为开发者提供了强大的能力,可以在运行时检查和操作类、接口、对象及其属性。本PPT深入探讨了这些概念,旨在帮助开发者充分利用Java平台的灵活性。 首先,Java反射...

    java反射全解(反射原理+反射API详解+反射与数组+反射与泛型+反射源码与性能开销+反射优缺点+反射与内省)

    反射机制的分类包括反射 API、反射与数组、反射与泛型、反射源码与性能开销、反射优缺点、反射与内省等。 反射 API 是 Java 语言提供的一组 Application Programming Interface(API),用于在运行时获取类的信息和...

    JAVA的内省机制(introspector)与反射机制(reflection).docx

    "JAVA的内省机制(introspector)与反射机制(reflection)" JAVA 的内省机制(introspector)和反射机制(reflection)是两个重要的概念,在 JAVA 编程中扮演着至关重要的角色。那么,什么是内省机制和反射机制?它们...

    java面试题--反射机制

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

    候捷谈Java反射机制

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

    java反射机制.pdf

    ### Java反射机制详解 #### 一、引言 Java反射机制是Java语言中一项重要的功能,使得Java在一定程度上具备了动态语言的特性。通过Java反射机制,可以在运行时获取类的信息并操作类的对象,这为Java应用开发带来了...

    Java中的内省与反射.doc

    ### Java中的内省与反射详解 #### 一、引言 在深入了解Java语言的过程中,我们会遇到两个重要的概念:反射和内省。这两种技术在实际开发中有着广泛的应用,尤其是在需要进行动态操作或元数据处理的场景下尤为重要...

    java反射原理

    总结来说,Java反射机制是Java语言的一个重要特性,它允许程序在运行时动态地加载、检测和使用类信息,极大地增强了Java的灵活性和扩展性。然而,正如任何强大工具一样,反射机制的使用也需遵循一定的原则,避免滥用...

    用反射和内省技术实现简单SpringIOC

    反射是Java提供的一种强大的动态类型机制,它允许程序在运行时检查类的信息,如类名、属性、方法等,并能够创建和操作对象。Java.lang.reflect包提供了Class、Constructor、Method和Field等类来支持反射操作。 内省...

    C++反射机制实现

    利用宏定义和模板来实现反射机制能够提供编译时的类型检查,并且能够将反射机制与类型系统结合得更紧密。泛型编程也能够作为实现反射机制的手段之一,它允许在编译时对类型进行操作,提高了类型安全和性能。 文档中...

    JAVA反射侯捷观点

    Java反射机制是Java被视为动态语言的关键特性之一,它允许程序在运行时通过Reflection APIs获取任何已知名称的类的内部信息。这一机制使得开发者能够在运行时检查类的修饰符(如public、static等)、超类(如Object...

    Java基础加强-个人总结doc

    2. **反射机制**:Java反射是程序在运行时能够获取自身信息并操作类的能力。通过反射,我们可以动态创建对象、调用方法、访问私有成员,以及处理枚举和注解。这是Java灵活性的重要体现,常用于框架开发和元编程。 3...

    类的反射机制您的网络连接,请

    Java反射API主要包括以下几个核心类: 1. **Class类**:每个类在JVM中都有一个对应的Class对象,它包含了类的所有信息。我们可以通过`Class.forName()`或者对象的`getClass()`方法来获取对应的Class对象。 2. **...

    Java Reflection in Action

    在书中,作者通过具体的例子展示了一系列的反射技术,包括但不限于动态代理、类加载器的使用、内省机制等。这些技术通常在开发中较为复杂且易出错,但本书深入浅出地解释了这些技术背后的概念,并提供了足够的背景...

    java ioc,aop实现(内省),仿spring功能实现.

    总结,本主题主要涉及Java的IOC和AOP概念,以及如何通过内省技术实现类似Spring的功能。通过这个过程,我们可以更深入地理解Spring的工作原理,同时提高我们的编程技巧和解决问题的能力。在源码和工具方面,我们可以...

    Java 内省(Introspector)深入理解

    Java内省(Introspector)是Java语言提供的一种机制,用于在运行时分析Java对象的属性、方法和事件。...了解并熟练掌握Java内省机制,可以提高代码的灵活性和可维护性,尤其是在处理基于JavaBean的复杂系统时。

Global site tag (gtag.js) - Google Analytics