我正在寻找一种方法来拦截从JavaScript(Rhino / Java)到任何和所有Java对象(Java方法)的所有方法调用。
我想:
在Rhino-Engine中有没有办法解决这个问题?
我知道还有其他选项,如面向方面的编程 - 库,但我想避免这些。
我还试图替换Rhino引擎中的NativeJavaMethod
实现,但是它与系统非常相关,无法替换。
如果只有一个工厂(就像使用ContextFactory那样)会很棒。
或类似ContextFactory.doTopCall(...)
的方法调用拦截器,但适用于所有JS-2-Java调用。
答案 0 :(得分:0)
答案 1 :(得分:0)
如果您只是想拦截对Java对象方法的调用,那么这是可能的。通过在初始化上下文工厂时覆盖上下文工厂的makeContext方法来覆盖Context对象的创建(大多数情况下它是全局上下文工厂)。
覆盖上下文中的wrap工厂并覆盖wrapAsJavaObject方法并返回一个覆盖get()和put()方法的NativeJavaObject的匿名实现。每次放置某些东西(如属性或方法),检查它是否为FieldAndMethods。创建一个从FieldAndMethods扩展并包装它(包含)的新类,通过将原始对象传递给构造函数来创建此类的实例,并将此实例放在原始实例中。
新类应覆盖用于拦截的call()方法。并只调用包含的对象调用方法。
如果您需要示例代码,请与我们联系。