除了逆向工程之外,反射实际上有用吗?

时间:2011-11-04 15:40:12

标签: reflection

Java和PHP等语言支持反射,允许对象提供有关自身的元数据。是否存在任何合法的用例,您需要能够执行某些操作,例如询问对象在逆向工程领域之外还有哪些方法?这些用例是否实际上已在今天实施?

4 个答案:

答案 0 :(得分:5)

反射在Java中被广泛使用,框架在运行时利用其他代码动态进行操作。如果没有反射,代码之间的所有链接都必须在编译时完成(静态)。

因此,例如,任何有用的插件框架(OSGi,JSPF,JPF)都利用了Reflection。任何注入框架(Spring,Guice等)都会利用Reflection。

任何时候你想编写一段与另一段代码交互的代码,而在编译时可以使用那段代码,而Reflection是Java的前进方向。

但是,这最好留给框架,并且应该封装。

答案 1 :(得分:1)

像Spring或Hibernate这样的框架广泛使用反射来检查类并查看注释。

答案 2 :(得分:1)

肯定有很好的用例。例如,获取开发人员提供的元数据。 Java API越来越多地使用注释来提供有关方法/字段/类及其使用的信息。像输入验证,绑定到数据表示......您可以在编译时使用它们来生成元数据描述符并使用它们,但是在运行时执行它需要反射。即使您使用了元数据描述符,它们最终也会包含需要通过反射访问的类,方法和字段名称等内容。

另一个用例:动态语言。使用Ruby ...它允许您在尝试调用该方法之前预先检查对象是否会响应方法名称。这样的事情需要反思。

或者如何从外部编译代码提供类或方法名称,例如选择某些API的实现时。那只是一些文字。查看它解决的问题归结为反思。

答案 3 :(得分:0)

用于调试,序列化,记录,测试的框架......