在不更改代码的情况下影响Java类

时间:2014-09-20 02:47:36

标签: java oop

我使用的是一个Java库,包含两个类FooFooConfig;我无法更改库代码,但可以读取它。以下是Foo

的相关功能
public class Foo
{
    /** Install a configuration on this Foo */
    void configure(FooConfig config);

    /** Uninstall the current configuration */
    void unconfigure();
}

库有时无法控制Foo,并在创建后不久安装配置。 Foo一次只能进行配置。我想改用继承自MyFooConfig的{​​{1}}。有没有办法拦截FooConfig调用,或configure构造函数,或类似的东西来代替使用我的类?

我目前的解决方案是在创建和配置后立即获取FooConfig对象的引用,卸载当前配置,然后安装Foo。这可能会起作用,但它会导致几个不同的问题(这两个问题都是难以实现的解决方案,并且存在一些无法从用户隐藏的不合理问题)。有没有更好的方法,最好使用Java的功能拦截对MyFooConfig的构造函数调用,或FooConfig方法,或类似的东西?与我发现的替代解决方案最接近的是尝试使用不同的configure在我的幕后用我自己的类替换ClassLoader,但我实际上无法访问该对象创建FooConfig s所以我不认为这是可能的。其他看起来很有希望但最终没有成功的事情是代理对象(我不能让FooConfig成为代理对象),看看我是否可以在没有创建Foo的情况下获得通知实际上拦截了构造函数(所以我可以找到它的FooConfig并以比我目前正在做的更好的方式重新配置它),并更改库代码本身(由于各种原因,结果证明不可能)

我对面向方面的编程知之甚少,但似乎它可以提供帮助。不幸的是,所有AOP Java工具似乎都需要特殊的编译器,我不想改变构建过程。

0 个答案:

没有答案