0

我尝试替换 3pp 类中的一个方法,该方法由另一个 3pp 类调用。我知道我是否重写了洞类,并修改了类路径顺序;或将其放入 java home 的 lib/ext 中,扩展类加载器将加载我的类而不是原始类。

但是如何从替换类扩展原始类:

package com.example
public class Foo extends com.example.Foo {
    @Override
    public void m1() {
    }
}

我知道这个例子不起作用,但我尝试描述目标:这个类扩展了具有相同规范名称的原始类,一个方法已被覆盖,所有其他方法都被继承。所以如果我们增加 3pp 产品的版本,我们不需要修改我们的类,因为我们只覆盖了我们想要覆盖的那个方法。

有人有好的解决方案或好主意吗?

4

1 回答 1

0

你在做什么是一件非常困难的事情,如果你正在开发一个 web 应用程序,如果你试图扩展的类在库中使用,它将不起作用,因为如果在你的 JAR 中有一个类SomeService使用类Foo类加载器将加载 JAR 中的类。
另一件事是以这种方式覆盖类不太好,我可以建议做的是使用AOP覆盖该方法。
如果您使用的是 spring,它有一个强大的系统来执行它http://static.springsource.org/spring/docs/current/spring-framework-reference/html/aop.html,但它只在 spring 上下文中工作。
否则你可以使用AspectJ(真诚地我从未使用过它)。

最后一件事,这个类只是在 3pp 库中使用吗?

于 2012-07-30T10:43:02.480 回答