除了逆向工程之外,反射真的有用吗?



Java和PHP等语言支持反射,这允许对象提供关于自身的元数据。是否存在合法的用例,您需要能够做一些事情,例如询问对象在逆向工程领域之外具有哪些方法?这些用例在今天实际实现了吗?

反射在Java中被框架广泛使用,这些框架在运行时被利用来动态地与其他代码操作。如果没有反射,代码之间的所有链接都必须在编译时完成(静态地)。因此,例如,任何有用的插件框架(OSGi、JSPF、JPF)都利用了反射。任何注入框架(Spring、Guice等)都利用了反射。

任何时候,如果你想编写一段代码与另一段代码交互,而不需要在编译时使这段代码可用,反射就是Java的前进方向。

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

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

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

或者当必须从外部编译代码提供类或方法名称时,例如选择某些API的实现时,该怎么办?那只是一段文字而已。查找它解析的内容归结为反射

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

用于调试、序列化、日志记录、测试…的框架

相关内容

  • 没有找到相关文章

最新更新