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

在不更改代码的情况下影响Java类,java,oop,Java,Oop,我使用的是一个Java库,有两个类Foo和FooConfig;我无法更改库代码,但可以读取它。以下是Foo的相关功能: 库在我无法控制的时候创建foo,并在创建后不久安装配置。一个Foo一次只能有on配置。我想改用从FooConfig继承的MyFooConfig。有没有办法截获configure调用、FooConfig构造函数或类似的东西来使用我的类呢 我当前的解决方案是在创建和配置Foo对象后不久获取对其的引用,卸载当前配置,然后安装MyFooConfig。这可能会起作用,但它会导致几个不同的

我使用的是一个Java库,有两个类Foo和FooConfig;我无法更改库代码,但可以读取它。以下是Foo的相关功能:

库在我无法控制的时候创建foo,并在创建后不久安装配置。一个Foo一次只能有on配置。我想改用从FooConfig继承的MyFooConfig。有没有办法截获configure调用、FooConfig构造函数或类似的东西来使用我的类呢

我当前的解决方案是在创建和配置Foo对象后不久获取对其的引用,卸载当前配置,然后安装MyFooConfig。这可能会起作用,但它会导致几个不同的问题,既有难以实现的解决方案,也有一些用户无法隐藏的不公平性。有没有更好的方法,最好使用Java的特性来拦截对FooConfig的构造函数调用、configure方法或类似的东西?我找到的最接近于替代解决方案的方法是尝试使用不同的类加载器在幕后用我自己的类替换FooConfig,但我实际上无法访问创建FooConfig的对象,因此我认为这是不可能的。其他看起来很有希望但最终没有成功的事情是代理对象我不能让Foo成为代理对象,看看我是否可以在创建FooConfig时得到通知,而不实际拦截构造函数,这样我就可以找到它的Foo并以比我现在做的更好的方式重新配置它,由于各种原因,改变库代码本身是不可能的


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

基本上,如果你不能通过重载和反射来实现,那么你就无法实现。其他选项可能比AOP更糟糕。其中一个可能是像这样的字节码操纵库。
public class Foo
{
    /** Install a configuration on this Foo */
    void configure(FooConfig config);

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