美文网首页
Java反射机制

Java反射机制

作者: 易点梅 | 来源:发表于2019-05-24 13:52 被阅读0次

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

要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.

反射就是把java类中的各种成分映射成一个个的Java对象

例如:一个类有:成员变量、方法、构造方法、包等等信息,利用反射技术可以对一个类进行解剖,把个个组成部分映射成一个个对象。(其实:一个类中这些成员方法、构造方法、在加入类中都有一个类来描述)

1、method.invoke(obj,params)

2、constructor.newInstance()

反射的用途

一、通过反射运行配置文件内容

二、通过反射越过泛型检查

 获取构造方法:

1.批量的方法:

         public Constructor[] getConstructors():所有”公有的”构造方法

          public Constructor[] getDeclaredConstructors():获取所有的构造方法(包括私有、受保护、默认、公有)

2.获取单个的方法,并调用:

          public Constructor getConstructor(Class… parameterTypes):获取单个的”公有的”构造方法:

          public Constructor getDeclaredConstructor(Class… parameterTypes):获取”某个构造方法”可以是私有的,或受保护、默认、公有;

3.调用构造方法:

         Constructor–>newInstance(Object… initargs)

获取成员方法并调用:

1.批量的:

    public Method[] getMethods():获取所有"公有方法";(包含了父类的方法也包含Object类)

    public Method[] getDeclaredMethods():获取所有的成员方法,包括私有的(不包括继承的)

 2.获取单个的:

   public Method getMethod(String name,Class<?>... parameterTypes):

                 参数:

                     name : 方法名;

                    Class ... : 形参的Class类型对象

   public Method getDeclaredMethod(String name,Class<?>... parameterTypes)

3.调用方法:

    Method --> public Object invoke(Object obj,Object... args):

                参数说明:

                 obj : 要调用方法的对象;

               args:调用方式时所传递的实参;

获取成员变量并调用:

 1.批量的

     1).Field[] getFields():获取所有的"公有字段"

     2).Field[] getDeclaredFields():获取所有字段,包括:私有、受保护、默认、公有;

 2.获取单个的:

     1).public Field getField(String fieldName):获取某个"公有的"字段;

     2).public Field getDeclaredField(String fieldName):获取某个字段(可以是私有的)

3. 设置字段的值:

     Field --> public void set(Object obj,Object value):

                  参数说明:

                 1.obj:要设置的字段所在的对象;

                 2.value:要为字段设置的值;

以后详写

动态代理

publicinterface Interface {

    void doSomething();

    void somethingElse(String arg);

}

public class RealObject implements Interface {

    publi cvoid doSomething() {

        System.out.println("doSomething.");

    }

    public void somethingElse(String arg) {

        System.out.println("somethingElse " + arg);

    }

}

public class DynamicProxyHandler implements InvocationHandler {

    private Object proxyed;

    public DynamicProxyHandler(Object proxyed) {

        this.proxyed = proxyed;

    }

    @Override

    public Object invoke(Object proxy, Method method, Object[] args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {

        System.out.println("代理工作了.");

        return method.invoke(proxyed, args);

    }

}

public class Main {

    public static void main(String[] args) {

        RealObject real = new RealObject();

        Interface proxy = (Interface) Proxy.newProxyInstance(

                Interface.class.getClassLoader(), new Class[] {Interface.class},

                new DynamicProxyHandler(real));

        proxy.doSomething();

        proxy.somethingElse("luoxn28");

    }

}

相关文章

  • Java反射机制入门

    Java反射机制入门 一、什么是反射 JAVA反射机制(The JAVA reflection mechanism...

  • 反射之一

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

  • 反射之二

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

  • Java基础之反射

    Java基础之—反射(非常重要)Java中反射机制详解Java进阶之reflection(反射机制)——反射概念与...

  • 反射之三

    总结内容源自以下文章 粗浅看java反射机制 反射机制应用实践 谈谈java反射机制 Java Reflectio...

  • java反射机制

    java的反射机制 1 JAVA的反射机制是什么?反射机制能做什么?反射机制的优点与缺点2 认识 Class...

  • Java中反射的用途

    Java的反射机制是Java特性之一,反射机制是构建框架技术的基础所在。灵活掌握Java反射机制,对大家以后学习框...

  • Chapter 13 . 反射机制

    阅读原文 Chapter 13 . 反射机制 13.1 Java反射机制研究及应用 Java Reflection...

  • 详解Java反射机制(Reflection)

    详解Java反射机制(Reflection) 反射机制的作用 JAVA反射机制是在运行状态中,对于任意一个类,都能...

  • Java 反射机制

    [1]. java反射详解[2]. Java Reflection(反射机制)详解[3]. 深入理解Java类型...

网友评论

      本文标题:Java反射机制

      本文链接:https://www.haomeiwen.com/subject/fjygzqtx.html