• 反射机制


    反射是一种自我管理机制--------框架中使用!

    通过反射可实现:

    1.在运行时判断任意一个对象所属的类

    2.在运行时构造任意一个类的对象

    3.在运行时判断任意一个类所具有的成员变量和方法

    4.在运行时调用任意一个对象的方法

     反射能让你在运行时而不是编程时做下面的事情:
    (1) 获取一个类的内部结构信息(或者成为元数据), 包括包名,类名, 类所有的方法, 
    (2) 运行时对一个Java对象进行操作, 包括创建这个类的实例, 设置一个属性的值, 调用这个类的方法等等。 

    用java的反射功能,根据一个类new出一个实例
    第一步,先把HelloWorld的类装载进来

    Class cls = Class.forName("com.example.HelloWorld");

    第二步,创建一个HelloWorld的实例,注意,这里并没有用强制转型把obj转成HelloWorld

    Object obj = cls.newInstance();

    第三步,得到这个类的方法,注意,一个类的方法也是对象

    Method m = cls.getDeclaredMethod("sayHello");

    第四步,方法调用,输出"helloworld"

    m.invoke(obj);

    为什么不直接new出来呢?通过反射来创建对象,调用方法多麻烦?

    关键在于:很多时候我们并不能事先知道要new什么对象,

    相反,我们可能只知道一个类的名称和方法名,很多时候这些名称都是写在XML配置当中的

    在java ee世界中,反射最大的作用就是支持以声明式的方法(在XML中)来描述应用的行为,是SSH最核心的技术

    【Struts的例子】
    1. 在XML配置文件中定义Action
    <action name="HelloWorld" class="example.HelloWorld">        
            <result>/hello.jsp</result>  
    </action> 
    2. 定义Java 类
    public class HelloWorld extends ExampleSupport {  
        public String execute() throws Exception {    
            ......
            return SUCCESS;                           
        }  
        .......
    }
    Struts 框架的作者事先肯定不知道你会配置一个HelloWorld的Action 。
    不过他可以这么做, Struts 在启动以后,解析你配置XML配置文件, 发现名称为HelloWorld的Action, 找到相对于的类名example.HelloWorld, 然后就可以通过反射去实例化这个类。 等到有人调用这个action 的时候, 可以通过反射来调用HelloWorld的execute() 方法。 

    为什么叫反射?

    java程序在运行时能够看到自己的结构和行为,就像看到镜子当中的自己一样,反射了出来

    如果扩展一点,这种用代码来生成代码的方式,其实叫做"元编程"

  • 相关阅读:
    自动装配
    SpringMVC
    线程池的类型以及执行线程submit()和execute()的区别
    JDBC配置文件db.properties(Mysql) 及dbutils的编写
    tokuDB 安装与备份小记
    CentOS 7 安装 LEMP
    MySQL 闪回工具之 binlog2sql
    解决 MySQL 分页数据错乱重复
    ClickHouse 快速入门
    【理论篇】Percona XtraBackup 恢复单表
  • 原文地址:https://www.cnblogs.com/smallwangmusk/p/9004475.html
Copyright © 2020-2023  润新知