• Reflection 反射


    第一、反射的应用案例?[为什么要学?]

    1. 案例1:tomcat?
      1.Tomcat这款WEB服务器是很早之前开发的。我们写的StudentServlet类是今天写的。Tomcat负责构造我们写的StudentServlet类。
      
      结论:在Tomcat中一定有一段在运行期根据我们写的Servlet类动态构造对象的代码【反射】
      
      • 1
      • 2
      • 3
    2. 案例2:idea的.对应的代码?
      我们运行起idea来 写JAVA代码,写的过程中.触发一段获得当前类中属性、方法等信息的代码。【反射】
      
      • 1
    3. JDBC封装、Spring、MyBatis…

    第二、反射的简介?

    1. 反射是JAVA语言提供的一套在运行期动态获得类中信息的API【Application Programming Interfaces 类库】。java.lang.reflect包 
      
      • 1
    2. JAVA中四大类型: 类 接口 枚举 注解  都会生成.class文件 也可以使用反射解析。
      
      • 1
    3. 通过反射我们可以在运行期动态的获得类中的属性、方法、构造方法等信息;通过反射我们可以在运行期动态的执行类中的方法;通过反射我们可以在运行期动态的构造类的对象;通过反射我们可以在运行期动态的判断对象的类型。
      
      • 1

    第三、反射入口类、平台类(java.lang.Class)

    1. java.lang.Class类的理解?
      1. 睡着的同学---》SleepStudent 桌子--》Table 
        水杯========》Cup   事务=====>Transaction 
        类==========》Class
        Class类是描述类的类。一个Class类的对象代表一个具体的类。
        
        • 1
        • 2
        • 3
        • 4
      2. 当JVM加载完一个类之后,构造该类的任何对象之前,会首先在内存的堆区创建一个Class类型的对象,使用该对象存放JVM加载的类的信息。
        
        xml/html文件====>
        
        class文件=====》Class对象
        Student stu = new Student();
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
         
      3. ~~~
         我们要获得类中信息,而在运行期类中信息都在Class对象中,所以我们需要首先获得Class对象。Class类没有公共的构造方法,Class类的对象是JVM加载类时自动构造的,所以外部不能new的。
      
      • 1
      • 2
      • 3
      1. 一个类的对象可以有很多个,但是这些对象都指向一个Class对象。
        
        • 1
      2. 所有基本数据类型和关键字void都有的Class对象
        
        • 1
      3. 基本数据类型和对应的包装类不是一个Class对象。
        
        • 1
      4. 所有具有相同元素类型和维数的数组都对应一个Class对象。
        
        • 1
    2. 如何获得Class类的对象?
      1.类名字.class 固定形式  Class c = Student.class
      
      2.对象.getClass()  stu.getClass()
      
      3.类名字  Class cls =  Class.forName(类名字)
      
      • 1
      • 2
      • 3
      • 4
      • 5
    3. 常用方法?
      1. forName
        
        • 1
      2. getName() /getSimpleName()
        
        • 1
      3. newInstance(): 使用无参构造方法构造对象。
        
        • 1

    第四、通过Class类这个平台获得类中的各种信息?

    1. 属性:Field是用来描述属性的类,一个Field的对象代表一个具体的属性
      1. Field getField(String)
      2. Field[] getFields():获得本类和直接父类中所有的公共的属性。
      3. getDeclaredField(String)
      4. getDeclaredFields():获得本类中所有的属性【包括私有的】
    2. 方法:Method是描述方法的类,一个Method对象代表一个具体的方法。
    3. 构造方法:Constructor类描述构造方法。。。。。

    请添加图片描述

    第五、案例

    1. DBUtils 工具类 Spring JdbcTemplate ==QueryRunner
    2. Tomcat流程

    第六、JAVABEAN基本操作?反射基本代码的封装?

    内省 自省Introspector+PropertyDescriptor

    比较方便的获得getter和setter

    回顾:一次请求的过程?

    服务器启动:

    • 读取自身配置文件
    • 读取管理的所有工程中的配置文件【webapps+热部署】
    • 在8080端口监听

    请求到达:

    • 浏览器地址栏输入地址 回车
    • 浏览器把地址组装成标准的HTTP请求报文,发送。 DNS
    • 服务器上的Tomcat接受到请求报文,构造请求和响应对象存放解析的请求报文信息和即将生成的响应信息。
    • 判断本次请求时静态资源还是动态资源:
    • 静态资源交给 DefaultServlet处理,成功返回数据,找不到404
    • 动态资源:到WEB.xml中寻找合适的 >=>,到此就找到了处理本次请求了Servlet类了。
    • 判断内存中是否已经有了该类型的对象,如果由,则返回原来的,如果没有,则使用反射创建新的。
    • 容器调用init()方法初始化。。。。Method.invoke
    • 容器调用service()处理请求 。。。method.invoke===>doXX
    • 容器关闭时调用destroy… method.invoke()
    • 服务器根据生成的响应对象,组装标准的响应报文返回给客户端。

    请添加图片描述

    补充:XML解析?

    • jdk中提供了两种解析方案:

      • SAX:基于事件的解析方式,不需要把文档加载到内存。占资源少,只能解析一次

      • DOM:面向对象,把整个文档都加载到内存,占资源多,可以多次解析

      请添加图片描述

    • DOM方式和SAX方式都有非常明显的优缺点,一般解析XML使用第三方=DOM4J(结合了DOM和SAX)

  • 相关阅读:
    吴恩达《机器学习》8-5->8-6:特征与直观理解I、样本与值观理解II
    MySQL安装与卸载
    云原生:10分钟了解一下Kubernetes架构
    前端工作小结80-title写活
    【无标题】
    Qt Creato配置PCL库
    【Vue.js 3.0源码】直击Vue核心的实现之组件更新完整的DOM diff流程(上)
    一个Qt鼠标透传场景与事件过滤器的用法
    java计算机毕业设计ssm+vue红联小区果蔬销售网站-水果购物商城
    get√接口自动化核心知识点浓缩,为面试加分
  • 原文地址:https://blog.csdn.net/qq_45041558/article/details/125510558