黑马程序员——反射

                                                                                      ------- android培训java培训、期待与您交流! ----------

 

一、概述

1、反射机制

通过Java的反射机制,在运行状态中,对于任意一个类(.class文件),都能够知道这个类中的所有属性和方法;对于任意一

个对象,都能够调用它的任意一个方法和属性。这种动态获取类的信息及动态调用对象的方法功能称为Java语言的反射机制。

2、反射机制的好处

提高了程序的扩展性

3、两种提高程序扩展性的方式对比

多态提高程序扩展性:

子类对象传递给父类引用来实现的 如:Animal ani=new Cat();

【缺点】必须要通过new来建立子类对象。子类对象必须写死在代码中。

反射提高程序扩展性的优势:

省略创建子类对象,直接将子类对象的类名字符串的形式传递给反射技术框架由反射技术框架来创建这个字符串代表的类

的实例。

4、反射的理解

(1)反射技术可以对类进行解剖,把Java类的各种成分映射成相应的Java类。

(2)Java类的组成:成员变量、成员方法、构造方法、修饰符、包等。

(3)一个类中的每个成员都可以用相应的反射API类的一个实例对象来表示,通过调用Class类的方法可以得到这些实例对象

二、反射的应用场景

1、有应用程序,但没有源码

一个做好应用程序没有源代码。但是现在客户端想为这个应用程序添加自己的新功能,怎么办?存在以下两个需要解决的问题:

问题[1]. 也就是已经独立运行的App怎么识别客户端自定义的类?(因为App在开发的时候,并不知道客户端的自定义类是什么样子)

问题[2]. 如果App有办法识别这个了客户端自定义的类,如何使用这个类的对象呢?(因为App的源码不能改变)

问题[1]的解决办法:

(1) 通常一个应用程序为了扩展性,都会对外暴露一个接口

(2) 这个接口由想扩展软件功能的客户端进行实现,之后,该应用软件可以使用符合自己条件的接口的子类对象

问题[[2]的解决办法:

(1)通常应用程序在对外暴露接口之外,还对外提供配置文件。提供了配置文件之后,便可以把客户端自己建立的并且符合标准的告知应用程

序的App,而不用了解应用程序App里面是如何建立这个类的对象的。(从客户端的角度)

(2) 应用程序App采用IO流技术读取配置文件。这样,应用程序App便了解到了客户端自定义的类是什么。

(3)应用程序App根据IO获取到的客户端自定义的类名字符串去寻找相应的.class类文件

如图:

一旦App找到客户端自定义的类文件DemoImpl.class,App可以将其加载到内存中,并通过字节码文件建立对象【这一步使用到了Java的反射技术!!!】

【为什么是反射机制】由于App一定是在客户端使用它之前编写成功,所以,App本身并不能知道未来客户端定义的类的名字,所以,一定是在运行时获取一个类的信息、获取这个类的对象并调用这个对象的有关方法,这便是Java反射机制的定义

如何为自行开发的软件提高可扩展性?

1编写软件的时候,要先通过反射技术去实现如何通过类名字符串获取该对象的实例,并且能进行方法调用

2然后对外暴露符合自身软件规范的接口

3提供符合读写规则配置文件

2、Tomcat服务器

1) Tomcat服务器应用到的Java的三大技术

IO技术、ServerSocket技术和反射技术。

2) Tomcat服务器大致处理用户应答的思路

(1). 对外暴露接口---->著名的Servlet (服务器脚本片段)

[1]. 对外提供接口的原因:具体处理客户端应答请求的方式是不一样的。应该根据具体的请求来进行具体的处理。向上抽取形成Servlet接口并提供给客户端使用。

[2]. 由开发者来实现Servlet接口中定义的具体应答请求的处理方式

(2). 提供配置文件---->web.xml(WEB宏观部署描述文件)

每个Web应用程序都有自己的配置文件web.xml来告知Tomcat服务器(App)有哪些用户自定义的Servlet实现类

3). Tomcat具体加载处理细节

(1). Tomcat (App)首先读取配置文件web.xml中配置好的Servlet的子类名称

(2). Tomcat根据读取到的客户端实现的Servlet子类的类名字符串去寻找对应的字节码文件。如果找到就将其加载到内存。

(3). Tomcat通过预先设置好的Java反射处理机制解析字节码文件并创建相应的实例对象。之后调用所需要的方法。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
黑马程序员的tb_brand是指在JavaWeb基础教程中创建的一个表。这个表是用来存储品牌信息的,具体的表结构和数据类型需要和JavaBean类中的成员变量保持一致。\[1\]在这个教程中,使用了Maven来构建项目,并且使用了MyBatis作为持久层框架,通过配置pom.xml文件来引入相关依赖。\[2\] Maven是一个用于管理和构建Java项目的工具,它提供了一套标准化的项目结构、构建流程和依赖管理机制。\[3\] #### 引用[.reference_title] - *1* [【JAVAWEB开发】黑马程序员java web案例资料(含Element的删除与修改)](https://blog.csdn.net/aasd23/article/details/126940147)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [黑马程序员-MyBatis 框架-最全入门笔记、阿伟看了都得说真大、真细、真全!!!](https://blog.csdn.net/qq_57383364/article/details/128103058)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [JavaWeb——黑马程序员课程笔记](https://blog.csdn.net/King_ZACC/article/details/128573804)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值