【问题标题】:Interposing on Java Class Methods (without interfaces)插入 Java 类方法(无接口)
【发布时间】:2012-01-30 09:04:48
【问题描述】:

我想在类方法之间插入以动态扩展对象。

我已经知道 java.lang.reflect.Proxy 的东西,但是它太有限了,无法进行真正的插入。

来自Using java.lang.reflect.Proxy to Interpose on Java Class Methods,第一个限制是:

(...) 必须通过代理类的实例调用该方法。因此,例如,嵌套的方法调用不会被拦截。

还有最糟糕的:

(...) 该方法必须已在由被代理的对象实现的接口中定义。不能通过没有实现接口的类的实例来调用。

我想在运行时扩展的对象没有实现任何接口,最糟糕的是,我需要覆盖的方法是嵌套的和私有的。

我知道这在 Python 和 C 中相当容易,上面引用的文章说这是可能的:

本系列的下一篇文章将说明一些克服这些限制的技术。

很遗憾,我找不到这篇文章。

【问题讨论】:

  • 那篇文章是 2001 年的。它是 11 岁。您可能想尝试找到一些不那么史前的东西来作为您实验的基础。
  • 这种更改通常被认为是非常糟糕的编程实践。它可能导致无法维护和无法支持的代码。您的建议通常有更好的完成方式。我怀疑您对某个问题有特定的解决方案。您会考虑针对同一问题的其他解决方案吗?
  • 有时,黑客是唯一的方法。如果您对(长)故事感兴趣,请给我发 PM =)

标签: java reflection interposing


【解决方案1】:

尝试使用 CGLIB:

这是我几年前写的一个教程,它对 CGLIB 的介绍非常简单:CGLIB intro

如果您需要更多功率,请考虑使用AspectJ

希望对你有帮助

【讨论】:

  • 我忘了确切地说它与 Android 有关。 AspectJ 与 Android 兼容吗?
猜你喜欢
  • 1970-01-01
  • 2010-10-19
  • 2012-05-22
  • 2017-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-20
相关资源
最近更新 更多