我使用的是一个Java库,包含两个类Foo
和FooConfig
;我无法更改库代码,但可以读取它。以下是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工具似乎都需要特殊的编译器,我不想改变构建过程。