2
我很困惑,除了使用反射之外,如何在没有抛出ClassCastExcepion的情况下访问其他类加载器加载的对象实例? 看来,使用JndiObjectFactoryBean是一个更好的主意,但我不明白。 有没有人可以让我清楚? 非常感谢。如何访问由其他类加载器异常加载的使用反射的对象实例?
我很困惑,除了使用反射之外,如何在没有抛出ClassCastExcepion的情况下访问其他类加载器加载的对象实例? 看来,使用JndiObjectFactoryBean是一个更好的主意,但我不明白。 有没有人可以让我清楚? 非常感谢。如何访问由其他类加载器异常加载的使用反射的对象实例?
唯一的方法(除了反射)是总是使用接口类型与类交互;例如
public interface I {
public void foo();
}
public class C implements I {
public void foo(){ ... }
}
...
Classloader l1 = ...
I c1 = (I) l1.loadClass("some.pkg.C").newInstance();
c1.foo();
Classloader l2 = ...
I c2 = (I) l2.loadClass("some.pkg.C").newInstance();
c2.foo();
接口I
必须通过的l1
和l2
一个共同的祖先类加载器加载。假设这些类加载器(l1
和l2
)实际加载了类,则不能将c1
或c2
加到C
。
感谢您的回复。 我使用JndiObjectFactoryBean来获取被其他Web应用程序绑定的服务实例,并且我直接将由JndiObjectFactoryBean代理的实例转换为类型,它运行良好,并且不引发ClassCastException。 JndiObjectFactoryBean如何工作? 使用代理可以解决这个问题吗? – SuoNayi 2010-08-25 04:27:19
我不知道在这种情况下代理是否有帮助。你为什么不尝试它? – 2010-08-25 04:46:23