Java类加载器:如何替换3pp类的方法

时间:2012-07-30 10:31:50

标签: java classloader

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

最后,这个类只用于3pp库吗?