2016 - 2024

感恩一路有你

java反射调用接口中的方法 java的反射到底是有什么用处?怎么用?

浏览量:2102 时间:2021-03-15 17:51:49 作者:admin

java的反射到底是有什么用处?怎么用?

Java反射说的是在运行状态中,对于任何一个类,我们都能够知道这个类有哪些方法和属性。对于任何一个对象,我们都能够对它的方法和属性进行调用。我们把这种动态获取对象信息和调用对象方法的功能称之为反射机制。

可以不通过new关键字获取对象并且使用类对象中的成员变量,方法,修饰符等等,在这里举例获取类。

第一种:使用Class.forName(String classPath) ClassPath:写需要反射的类名,一般是以包名.类名。如:Class clazz = Class.forName("com.entity.Example")

第二种:直接使用Class clz = 类名.class

这种情况一般在我们知道有这个类的时候去使用。如:Class clz = Example.class

第三种:Class clz = 对象. getClass()

前提是对象已经被实例化出来了 。如:

Example ex = new Example()

Class clz = ex.getClass()

这三种方法都有各自的优点,一般我们使用第一种比较多,按照自己的实际需求去使用才是最好的。反射有啥用?有啥应用场景?

1.spring框架的ioc是基于java的反射机制。

2.JDBC 的数据库的连接注册驱动,获取连接也是基于Java反射。

3.Hibernate,Mybatis都有运用到反射。


如何把一个接口的所有实现类反射出来?

如果你自己也不知道这个接口有哪些实现类的,采用java默认的ClassLoader是没有办法获得所有实现类的,因为ClassLoader是在程序运行期间才会加载类到static区域,即如果你的程序需要使用某一个class,jvm发现这个class还没有被ClassLoader加载,就会主动去加载,否则就跳过,你没办法知道那些未被加载的实现类。如果你知道有哪些实现类的话,那就简单了,自己配置一个xml文件,把实现类的完整类名写在这个xml文件,再写一个解析程序,迭代每一个类名,直接用Class.forName加载就可以了。甚至你可以去解析所有的java源文件或class文件,像eclipse之类的IDE就是这么干的,它管理工程下的所有class,解析这些class,这样我们写程序的时候,才有代码提示之类的功能。如果你纯粹只想知道这个接口的实现类,在eclipse里面选中接口,按下F4,eclipse会为你列出所有的实现类。

java反射调用接口中的方法 反射获取接口实现类 java反射实现接口

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。