反射是什么

学Java的人都知道类概念,反射技术就是一种控制类的技术,JAVA程序在运行时,通过反射这个技术,能动态的获取到类实例的信息、创建实体类、操作实体类。

反射的功能列表:

  • 获取任意类的名称、package信息、所有属性、方法、注解、类型、类加载器等
  • 获取任意对象的属性,并且能改变对象的属性
  • 调用任意对象的方法
  • 判断任意一个对象所属的类
  • 实例化任意一个类的对象
  • 通过反射我们可以实现动态装配, 降低代码的耦合度, 动态代理等。
  • ...

反射的应用场景

一般应用开发者使用类的场景是:

  1. 需要自己创建一个类。

    先构想好一个类的结构,里面的属性和方法,然后使用代码编写好这些,通过new 关键字就能使用类了。

  2. 使用别人的创建好的类。

    查看别人已经写好的库是否满足需求,满足的话,就直接导入别人的库,还是通过new 关键字就能使用第三方库的类了。

所以大体来看一般的应用开发者很少或者不需要用到反射技术。那么谁需要用到反射技术?

  • 接口的开发者;
  • 框架的开发者;
  • 主程序员已经写好大部分类,但是不知道使用者要怎么调用,程序只能留下配置文件,使用者在使用这个程序之前,先配置好配置文件,然后程序运行的时候就自动加载配置文件内的类;
从这个视角来看,反射技术其实也属于一种接口,一种Java接口,通过这个接口可以让后人方便的调用前人写好的类。

问题1

请思考一下,使用反射和调用函数的区别?

  • 需要先看看反射和函数都是怎么样使用的。
  • 体会其中区别。

具体案例

  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)则换成另一个即可。

  2. Spring 框架的 IOC(动态加载管理 Bean),Spring通过配置文件配置各种各样的bean,你需要用到哪些bean就配哪些,spring容器就会根据你的需求去动态加载,你的程序就能健壮地运行。

    还有Spring AOP(动态代理)功能都和反射有关系。

  3. 当然还有很多框架:mybatis、dubbo、rocketmq...等等都会用到反射机制。

最新文章

  1. XML特殊符号
  2. 身份证校验(java)
  3. Laravel在不同的环境调用不同的配置文件
  4. 【转】group by多个字段理解
  5. MDX语法
  6. 深入浅出ES6(六):解构 Destructuring
  7. bzoj2424
  8. 自定义VIew基础
  9. ubuntu 安装输入法(fcitx)
  10. 使用android的mediaplayer做成 一个demo,欢迎测试使用
  11. BZOJ 4089:[Sdoi2015]graft(SDOI 2015 Round 2 Day 2)
  12. phpcms 笔记
  13. (一)基于阿里云的MQTT远程控制(Android 连接MQTT服务器,ESP8266连接MQTT服务器实现远程通信控制----简单的连接通信)
  14. 0.python class
  15. windows和linux环境下keras的模型框架可视化
  16. Spring MVC 异常处理 (九)
  17. nginx 学习笔记
  18. mysql5.7 root用户默认密码
  19. 项目Alpha冲刺--4/10
  20. Linux下实现 OpenSSL 简单加密与解密字符串

热门文章

  1. 使用Java刷评论为平台引流的经历
  2. PhaApi NOTORM 实现分表分库
  3. 电脑无法自动获取ip地址
  4. 区块链特辑——solidity语言基础(三)
  5. 1.5万字长文:从 C# 入门 Kafka
  6. VUE 轮询、轮询终止 beforeRouteLeave
  7. 继承QAbstractTableModel QStyledItemDelegate实现自定义表格,添加进度条和选中框。
  8. 【分析笔记】Linux 4.9 backlight 子系统分析
  9. DataX二次开发——新增HiveReader插件
  10. .NET 团队 更新了 .NET 语言策略