繁体   English   中英

如何拦截Java或Android中对库类的方法调用?

[英]How can I intercept a method call to a library class in Java or Android?

我有一个单例且没有实现任何接口的库类(因此,我假设我不能使用动态代理)。 但是,我需要与动态代理相同的功能。 我需要劫持该调用,记录一些数据并将调用直接传递给库。

是否可以不必使用AspectJ或Spring AOP来做到这一点? (我不确定如何使用这些框架,但是如果没有其他方法,我将不得不对其进行研究)。

您可以提供具有相同名称和包的相同类的自己的实现,并尝试首先将其放入类路径中。 具有此类类路径的调用代码将首先选择拦截类,并且拦截类可以调用实际包的其他类以提供其实际功能。

最好是使用存档工具从库.jar中删除覆盖的类。

您可以在调用f()的类中更改import语句,以便它们看到实现f()的其他类。 这个类的实现会做记录和调用真实F()。

仍然需要进行一些编辑,但不必更改每个呼叫。

顺便说一句:如果这种要求仍在进行,则取决于项目的规模,您可能仍要考虑对该“黑匣子”进行包装。

就像我在注释包装器中开始的那样,您是从外部库实现的所有类。 然后以这种方式从您自己的类中调用外部库,即可登录所需的函数。 如果使用相同的函数名称,则不必更改调用的名称,而只需更改导入。 大多数IDE提供批量名称替换,因此它不会带来太大的负担,但是会很乏味。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM