Java 代码反射和生成用于类重定向的外观



我在一个巨大的产品中有一堆类,我不想使用它们,而是想将它们的使用重定向到不同的类。这些类(和接口)大多是日志记录类。例如,org.apache.log4j类(很久以前)是以不同的包名称(如foo.org.apache.log4j)获取并导入到源中的。

现在,我想使用一些组件,这些组件使用这些导入和重命名的类,但没有这些导入和命名的类。这是因为导入的源代码很旧,缺乏功能,所以我不能按原样使用它。此外,有两个不同的log4j实现,旧的导入的和原始的log4j,会在配置过程中产生问题,等等。

到目前为止,我的作战计划是排除pom.xml中不需要的依赖项,并以某种方式自动生成façades,以替换不需要的类并重定向到原始库。例如,foo.org.apache.log4j.Logger将被继承自org.apache.log4j.Logger的立面所取代。

现在,有没有任何一种库或工具可以让我轻松遍历foo.org.apache.log4j定义的所有现有类,并允许我生成这些外观,或者我必须使用反射自己实现所有内容?

我不会使用工具来生成这些类,因为它是一次性的.

相反,我会使用IDE来生成实现,并使用重新分解,比如用委托代替继承。这将在没有额外工具的情况下生成所需的立面。

例如,说你需要一个地图的包装器(这个可以工作的IntelliJ,但其他也可以)

class MyMap<K,V> extends Map<K,V> { // this doesn't compile but can be refactored

如果我做"用委托替换继承",我会得到一个编译的包装器

class MyMap<K,V> {
   private Map<K,V> map;
   public V get(K key) { return map.get(key); }
   // all the methods of map have been wrapped
}

现在说我想要来自不同包的地图,但有了smae签名,我可以更改导入,它将使用不同的地图包

class MyMap<K,V> implements somepackage.Map<K,V> {
    private some.other.pkg.Map<K,V> map;
    // all the delegation methods I need.
    // customise them as required.
}

注意:内联之后,甚至不会有显著的性能损失。

最新更新