反射相关

mac2022-06-30  30

是什么? 任何一个都可以... 任何一个都可以...

为什么? java从源码到运行经历三个阶段:Source/Class/Runtime 反射是工作在Runtime 重点在于,如果在Source有部分信息是不清晰的,需要在Runtime阶段动态临时加载,反射就可以派上用场。 ->不需要知道类名就可以获取类对象 ->可以修改和使用private属性和方法

怎么做? ->class : .class getClass forName ->constructor :  getConstructors()/getConstructors("int.class","String.class") (类型)gtc.newInstance ->field : getDeclaredField("属性名")/field.setAccessible(true); ->method: getDeclaredMethod("int.class")//参数类型 method.invoke

应用场景? 1.JDBC 的数据库的连接 在JDBC 的操作中,如果要想进行数据库的连接,则必须按照以上的几步完成

通过Class.forName()加载数据库的驱动程序 (通过反射加载,前提是引入相关了Jar包) 通过 DriverManager 类进行数据库的连接,连接的时候要输入数据库的连接地址、用户名、密码 通过Connection 接口接收连接

2.在 Java的反射机制在做基础框架的时候非常有用,行内有一句这样的老话:反射机制是Java框架的基石。 一般应用层面很少用,不过这种东西,现在很多开源框架基本都已经封装好了,自己基本用不着写。 典型的除了hibernate之外,还有spring也用到很多反射机制。最经典的就是xml的配置模式。

Spring 通过 XML 配置模式装载 Bean 的过程:

将程序内所有 XML 或 Properties 配置文件加载入内存中 Java类里面解析xml或properties里面的内容,得到对应实体类的字节码字符串以及相关的属性信息 使用反射机制,根据这个字符串获得某个类的Class实例 动态配置实例的属性 Spring这样做的好处是:

不用每一次都要在代码里面去new或者做其他的事情 以后要改的话直接改配置文件,代码维护起来就很方便了 有时为了适应某些需求,Java类里面不一定能直接调用另外的方法,可以通过反射机制来实现

最新回复(0)