我正在运行一个Virgo-Tomcat-Server。有一个EnumMap,其键为

bundle.a.MyEnum


该地图的上下文是通过接收的

bundle.b


和使用SpelExpressionParser的Spring表达式语言,示例表达式为“ get(T(bundle.a.MyEnum).SAMPLEKEY)”。解析器(分别是其TypeLocator)需要访问bundle.a的ClassLoader。

所以我做了:

TypeLocator typeLocator = new StandardTypeLocator(getBundleAClassLoader());
StandardEvaluationContext evaluationContext  = new StandardEvaluationContext();
evaluationContext.setTypeLocator(typeLocator);
spelExpressionParser = new SpelExpressionParser();
spelExpressionParser.parseExpression(expression)).getValue(evaluationContext, context);


问题是,在bundle.b类中获取bundle.a的类加载器的正确方法是什么?
经过几次尝试,我发现的唯一可行的解​​决方案是:

private static ClassLoader getBundleAClassLoader() {
    MyEnum bundleARef = MyEnum.SAMPLEKEY;
    return bundleARef.getClass().getClassLoader();
}


编辑:解决方案

getBundleAClassLoader()


没有必要,

TypeLocator typeLocator = new StandardTypeLocator(this.getClass().getClassLoader());


工作良好。

最佳答案

这听起来太复杂了。只需在bundle.b的清单中执行Import-Package,就可以像访问自己的类型一样访问该类型。

08-17 10:27