17.反射与动态代理

news2024/12/23 1:41:02
  • 目录

    1.反射的概述

    2.学习反射到底学什么?

    3.字节码文件和字节码文件对象

    4.获取字节码文件对象的三种方式

    5.Class类中用于获取构造方法的方法

    6.Class类中用于获取成员变量的方法

    7.Class类中用于获取成员方法的方法

    8.反射和配置文件结合动态获取的练习与利用反射保存对象中的信息练习(重点)

    9.动态代理


  • 1.反射的概述

    • 1.1专业解释
      • 是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;
      • 对于任意一个对象,都能够调用它的任意属性和方法;
      • 这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。
    • 1.2通俗的理解
      • 利用反射创建的对象可以无视修饰符调用类里面的内容
      • 可以跟配置文件结合起来使用,把要创建的对象信息和方法写在配置文件中。
      • 读取到什么类,就创建什么类的对象
      • 读取到什么方法,就调用什么方法
      • 此时当需求变更的时候不需要修改代码,只要修改配置文件即可。
  • 2.学习反射到底学什么?

    • 反射允许对成员变量,成员方法和构造方法的信息进行编程访问

    • 反射都是从class字节码文件中获取的内容。
      • 如何获取class字节码文件的对象
      • 利用反射如何获取构造方法(创建对象)
      • 利用反射如何获取成员变量(赋值,获取值)
      • 利用反射如何获取成员方法(运行)
    • 反射应用的两个方向
      • 第一个方向:无视修饰符访问类中的内容。但是这种操作在开发中一般不用,都是框架底层来用的。
      • 第二个方向:反射可以跟配置文件结合起来使用,动态的创建对象,动态的调用方法。
  • 3.字节码文件和字节码文件对象

    • java文件:就是我们自己编写的java代码。
    • 字节码文件:就是通过java文件编译之后的class文件(是在硬盘上真实存在的,用眼睛能看到的)
    • 字节码文件对象:当class文件加载到内存之后,虚拟机自动创建出来的对象。
    • 这个对象里面至少包含了:构造方法,成员变量,成员方法。
    • 而我们的反射获取的是什么?字节码文件对象,这个对象在内存中是唯一的。
  • 4.获取字节码文件对象的三种方式

    • 3.1Class这个类里面的静态方法forName(“全类名”)(最常用)
      • Class clazz1 = Class.forName("com.itheima.reflectdemo.Student");
        全类名 = 包名 + 类名
      • 注解:
        • 源代码阶段获取 --- 先把Student加载到内存中,再获取字节码文件的对象
        • clazz 就表示Student这个类的字节码文件对象。
        • 就是当Student.class这个文件加载到内存之后,产生的字节码文件对象
    • 3.2通过class属性获取
      • Class clazz2 = Student.class;
    • 3.3通过对象获取字节码文件对象
      • Student s = new Student();
      • Class clazz3 = s.getClass();
    • 3.4注意:
      • 因为class文件在硬盘中是唯一的,所以,当这个文件加载到内存之后产生的对象也是唯一的
      • System.out.println(clazz1 == clazz2);//true
      • System.out.println(clazz2 == clazz3);//true
  • 5.Class类中用于获取构造方法的方法

    • 5.1方法名
      • Constructor<?>[] getConstructors()
        获得所有的构造(只能public修饰)
      • Constructor<?>[] getDeclaredConstructors()
        获得所有的构造(包含private修饰)
      • Constructor<T> getConstructor(Class<?>... parameterTypes)
        获取指定构造(只能public修饰)
      • Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
        获取指定构造(包含private修饰)
        Constructor con4 = clazz.getDeclaredConstructor(String.class);​
    • 5.2获取构造方法并创建对象
      • 涉及到的方法:newInstance(创建对象)与setAccessible(临时修改构造方法的访问权限)
      • 代码示例:JavaBean类

      • 代码示例:测试类

  • 6.Class类中用于获取成员变量的方法

    • 6.1方法名
      • Field[] getFields()
        返回所有成员变量对象的数组(只能拿public的)
      • Field[] getDeclaredFields()
        返回所有成员变量对象的数组,存在就能拿到
      • Field getField(String name)
        返回单个成员变量对象(只能拿public的)
      • Field getDeclaredField(String name)
        返回单个成员变量对象,存在就能拿到
    • 6.2获取成员变量并获取值和修改值
      • void set(Object obj, Object value)
        赋值 :参数一:表示要修改哪个对象的name? 参数二:表示要修改为多少?
      • Object get(Object obj)
        获取值
      • 代码示例:

  • 7.Class类中用于获取成员方法的方法

    • 7.1方法名
      • Method[] getMethods()
        返回所有成员方法对象的数组(只能拿public的)
        getMethods可以获取父类中public修饰的方法
      • Method[] getDeclaredMethods()
        返回所有成员方法对象的数组,存在就能拿到
      • Method getMethod(String name, Class<?>... parameterTypes)
        返回单个成员方法对象(只能拿public的)
      • Method getDeclaredMethod(String name, Class<?>... parameterTypes)
        返回单个成员方法对象,存在就能拿到
    • 7.2获取成员方法并运行
      • Object invoke(Object obj, Object... args) :运行方法
      • 参数一:用obj对象调用该方法
      • 参数二:调用方法的传递的参数(如果没有就不写)
      • 返回值:方法的返回值(如果没有就不写)
      • 代码示例:JavaBean类

      • 代码示例:测试类

  • 8.反射和配置文件结合动态获取的练习与利用反射保存对象中的信息练习(重点)

    • 8.1配置文件
      • 好处:1. 可以把软件的设置永久化存储 2. 如果我们要修改参数,不需要改动代码,直接修改配置文件就可以了
      • properties配置文件

      • 重点:1. properties是一个双列集合,拥有Map集合所有的特点 2. 有一些特有的方法,可以把集合中的数据,按照键值对的形式写到配置文件当中。也可以把配置文件中的数据,读取到集合中来。
    • 8.2需求:利用反射根据文件中的不同类名和方法名,创建不同的对象并调用方法。
    • 8.3分析:
      • ①通过Properties加载配置文件
      • ②得到类名和方法名
      • ③通过类名反射得到Class对象
      • ④通过Class对象创建一个对象
      • ⑤通过Class对象得到方法
      • ⑥调用方法
    • 8.4示例代码

    • 8.5利用反射保存对象中的信息练习
  • 9.动态代理

    • 9.1动态代理的功能
      • 可以无侵入式的给对象增强其他的功能(调用者 --> 代理 --> 对象)
    • 9.2Java通过什么来保证代理的样子
      • 通过接口保证,后面的对象和代理需要实现同一个接口,接口中就是被代理的所有方法
    • 9.3动态代理三要素:
      • 1,真正干活的对象
      • 2,代理对象
      • 3,利用代理调用方法
    • 9.4如何创建一个代理对象?
      • java.lang.reflect.Proxy类:提供了为对象产生代理对象的方法
      • public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)


        参数一:用于指定用哪个类加载器,去加载生成的代理类
        ​参数二:指定接口,这些接口用于指定生成的代理长什么,也就是有哪些方法
        ​参数三:用来指定生成的代理对象要干什么事情
    • 9.5代码示例
      • 代码示例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2184958.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业在数字化转型过程中如何确保数据安全性?

在数字化转型过程中&#xff0c;确保数据安全性是至关重要的。以下是一些关键措施&#xff0c;可以帮助企业在数字化转型中保障数据安全&#xff1a; 一、建立健全数据安全管理体系 制定完善的数据安全政策、制度和流程&#xff1a;明确数据安全管理的责任部门和人员&#xff…

stm32四足机器人(标准库)

项目技术要求 PWM波形的学习 参考文章stm32 TIM输出比较(PWM驱动LED呼吸灯&&PWM驱动舵机&&PWM驱动直流电机)_ttl pwm 驱动激光头区别-CSDN博客 舵机的学习 参考文章 stm32 TIM输出比较(PWM驱动LED呼吸灯&&PWM驱动舵机&&PWM驱动直流电机)…

前端学习第一天笔记 HTML5 CSS初学以及VSCODE中的常用快捷键

前端学习笔记 VsCode常用快捷键列表HTML5标题标签标签之段落、换行、水平线标签之图片图片路径详解标签之超文本链接标签之文本列表标签之有序列表列表标签之无序列表标签之表格表格之合并单元格Form表单表单元素文本框 密码框 块元素与行内元素&#xff08;内联元素&#xff0…

【09】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-Class类基础全解(属性、方法、继承复用、判断)

序言&#xff1a; 本文详细讲解了关于我们在程序设计中所用到的class类的各种参数及语法。 笔者也是跟着B站黑马的课程一步步学习&#xff0c;学习的过程中添加部分自己的想法整理为笔记分享出来&#xff0c;如有代码错误或笔误&#xff0c;欢迎指正。 B站黑马的课程链接&am…

横排文字、图层蒙版-1(2024年09月30日)

2024年09月30日 记录_导读 2024年09月30日 10:13 关键词 优惠券 设计 图层 背景 元素 调整 画笔工具 颜色 大小 位置 复制 移动 添加涂层 多选 显示 PS 元素文件 隐藏 使用规则 Logo 全文摘要 通过在Photoshop中精心操作图层&#xff0c;包括复制、移动和调整设置&#xf…

自动驾驶系列—自动驾驶发展史介绍

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

CMU 10423 Generative AI:lec13/13.5(text-to-image models:三大类方法、评估标准、图像编辑原理)

1 文章目录 1 lec13和lec13.5概述2 Text-to-Image Generation 概念、主要方法、挑战、发展历程1. **基本概念**2. **主要技术方法**2.1. **生成对抗网络&#xff08;GAN&#xff09;**2.2. **自回归模型&#xff08;Autoregressive Models&#xff09;**2.3. **扩散模型&#x…

声纳技术24.1.19声纳定向方法

一、基本原理 本质&#xff1a;利用声程差和相位差 声程差&#xff1a; 时间差&#xff1a; 相位差&#xff1a; 二、最大值测向 原理&#xff1a;接收到的信号幅度最大时换能器或基阵的指向性来测量目标方位 优点&#xff1a;简单&#xff0c;利用人耳可判别目标性质&a…

单链表的增删改查(数据结构)

之前我们学习了动态顺序表&#xff0c;今天我们来讲一讲单链表是如何进行增删改查的 一、单链表 1.1、单链表概念 概念&#xff1a;链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 1.2、链表与顺序表的…

大豆重测序二(同一领域互竞)-文献精读58

High-quality genome of a modern soybean cultivar and resequencing of 547 accessions provide insights into the role of structural variation 现代大豆品种的高质量基因组及对547个种质资源的重测序揭示结构变异的作用 大豆重测序-文献精读53 摘要 大豆提供蛋白质、油…

Qemu开发ARM篇-7、uboot以及系统网络连接及配置

文章目录 1、uboot及linux版本网络设置1、宿主机虚拟网卡创建2、uboot使用tap0网卡3、启动测试 2、访问外网设置 在上一篇Qemu开发ARM篇-6、emmc/SD卡AB分区镜像制作并通过uboot进行挂载启动中&#xff0c;我们制作了AB分区系统镜像&#xff0c;并成功通过uboot加载kernel以及d…

基于Springboot+Vue的美妆神域(含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统中…

基于STM32的智能停车管理系统

目录 引言项目背景环境准备 硬件准备软件安装与配置系统设计 系统架构关键技术代码示例 传感器数据读取模块停车位控制模块OLED显示状态应用场景结论 1. 引言 智能停车管理系统旨在提高停车场的管理效率&#xff0c;减少车主寻找停车位的时间。该系统通过传感器实时监测停车…

Spring Boot技术在足球青训管理中的实践与挑战

摘 要 随着社会经济的快速发展&#xff0c;人们对足球俱乐部的需求日益增加&#xff0c;加快了足球健身俱乐部的发展&#xff0c;足球俱乐部管理工作日益繁忙&#xff0c;传统的管理方式已经无法满足足球俱乐部管理需求&#xff0c;因此&#xff0c;为了提高足球俱乐部管理效率…

深圳大学 Github 学生认证并免费使用 Copilot AI编程工具(超详细)

文章目录 01 注册学生邮箱并添加邮箱到Github1.1 注册学生邮箱1.2 绑定学生邮箱 02 修改 Github profile 信息03 申请学生认证[^2]04 配置 Copliot05 VS code 使用 Copilot 01 注册学生邮箱并添加邮箱到Github 1.1 注册学生邮箱 对于深圳大学的学生来说&#xff0c;学校已经帮…

【CSS in Depth 2 精译_042】6.4 CSS 中的堆叠上下文与 z-index(下)——深入理解堆叠上下文

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一章 层叠、优先级与继承&#xff08;已完结&#xff09;第二章 相对单位&#xff08;已完结&#xff09;第三章 文档流与盒模型&#xff08;已完结&#xff09;第四章 Flexbox 布局&#xff08;已…

聊聊国内首台重大技术装备(2)

上次&#xff0c;介绍了《首台&#xff08;套&#xff09;重大技术装备推广应用指导目录&#xff08;2024年版&#xff09;》中介绍的硅外延炉&#xff0c;湿法清洗机&#xff0c;氧化炉&#xff0c;见文章&#xff1a; 《聊聊国内首台重大技术装备&#xff08;1&#xff09;》…

ESP32微信小程序SmartConfig配网

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 ESP32&微信小程序SmartConfig配网 前言一、SmartConfig是什么&#xff1f;二、使用乐鑫官方的smart_config例子1.运行照片 三、微信小程序总结 前言 本人是酷爱ESP32S3这…

数据结构--包装类简单认识泛型

目录 1 包装类 1.1 基本数据类型和对应的包装类 1.2 装箱和拆箱&#xff0c;自动装箱和自动拆箱 2 什么是泛型 3 引出泛型 3.1 语法 4 泛型类的使用 4.1 语法 4.2 示例 5 泛型的上界 5.1 语法 5.2 示例 5.3 复杂示例 8 泛型方法 8.1 定义语法 8.2 示例 总结 1 …

【web安全】——XSS漏洞

1.XSS漏洞基础 1.1.漏洞成因 XSS(Cross-site scripting)被称为跨站脚本攻击&#xff0c;由于与层叠样式表的缩写一样&#xff0c;因此被缩写为XSS.XSS漏洞形成的原因是网站/程序对前端用户的输入过滤不严格&#xff0c;导致攻击者可以将恶意的is/html代码注入到网页中&#x…