Java 反射概念的引入
2024-10-21 03:47:53
反射是什么
学Java的人都知道类概念,反射技术就是一种控制类的技术,JAVA程序在运行时,通过反射这个技术,能动态的获取到类实例的信息、创建实体类、操作实体类。
反射的功能列表:
- 获取任意类的名称、package信息、所有属性、方法、注解、类型、类加载器等
- 获取任意对象的属性,并且能改变对象的属性
- 调用任意对象的方法
- 判断任意一个对象所属的类
- 实例化任意一个类的对象
- 通过反射我们可以实现动态装配, 降低代码的耦合度, 动态代理等。
- ...
反射的应用场景
一般应用开发者使用类的场景是:
需要自己创建一个类。
先构想好一个类的结构,里面的属性和方法,然后使用代码编写好这些,通过new 关键字就能使用类了。使用别人的创建好的类。
查看别人已经写好的库是否满足需求,满足的话,就直接导入别人的库,还是通过new 关键字就能使用第三方库的类了。
所以大体来看一般的应用开发者很少或者不需要用到反射技术。那么谁需要用到反射技术?
- 接口的开发者;
- 框架的开发者;
- 主程序员已经写好大部分类,但是不知道使用者要怎么调用,程序只能留下配置文件,使用者在使用这个程序之前,先配置好配置文件,然后程序运行的时候就自动加载配置文件内的类;
从这个视角来看,反射技术其实也属于一种接口,一种Java接口,通过这个接口可以让后人方便的调用前人写好的类。
问题1
请思考一下,使用反射和调用函数的区别?
- 需要先看看反射和函数都是怎么样使用的。
- 体会其中区别。
具体案例
很多Web项目底层数据库有时是用mysql,有时用oracle,需要动态地根据实际情况加载驱动类,这个时候反射就有用了。
假设 com.mikechen.java.myqlConnection、com.mikechen.java.oracleConnection 这两个类我们只用其中一个,那我们在使用 JDBC 连接数据库时使用 Class.forName()通过反射加载数据库的驱动程序,如果是mysql则传入mysql的驱动类(com.mikechen.java.myqlConnection),而如果是oracle(com.mikechen.java.oracleConnection)则换成另一个即可。Spring 框架的 IOC(动态加载管理 Bean),Spring通过配置文件配置各种各样的bean,你需要用到哪些bean就配哪些,spring容器就会根据你的需求去动态加载,你的程序就能健壮地运行。
还有Spring AOP(动态代理)功能都和反射有关系。当然还有很多框架:mybatis、dubbo、rocketmq...等等都会用到反射机制。
最新文章
- XML特殊符号
- 身份证校验(java)
- Laravel在不同的环境调用不同的配置文件
- 【转】group by多个字段理解
- MDX语法
- 深入浅出ES6(六):解构 Destructuring
- bzoj2424
- 自定义VIew基础
- ubuntu 安装输入法(fcitx)
- 使用android的mediaplayer做成 一个demo,欢迎测试使用
- BZOJ 4089:[Sdoi2015]graft(SDOI 2015 Round 2 Day 2)
- phpcms 笔记
- (一)基于阿里云的MQTT远程控制(Android 连接MQTT服务器,ESP8266连接MQTT服务器实现远程通信控制----简单的连接通信)
- 0.python class
- windows和linux环境下keras的模型框架可视化
- Spring MVC 异常处理 (九)
- nginx 学习笔记
- mysql5.7 root用户默认密码
- 项目Alpha冲刺--4/10
- Linux下实现 OpenSSL 简单加密与解密字符串
热门文章
- 使用Java刷评论为平台引流的经历
- PhaApi NOTORM 实现分表分库
- 电脑无法自动获取ip地址
- 区块链特辑——solidity语言基础(三)
- 1.5万字长文:从 C# 入门 Kafka
- VUE 轮询、轮询终止 beforeRouteLeave
- 继承QAbstractTableModel QStyledItemDelegate实现自定义表格,添加进度条和选中框。
- 【分析笔记】Linux 4.9 backlight 子系统分析
- DataX二次开发——新增HiveReader插件
- .NET 团队 更新了 .NET 语言策略