Spring java.lang.LinkageError:加载程序约束冲突:加载程序先前启动了对名为X的其他类型的加载
我不熟悉Spring并使用Spring 3.2.2。我通过Spring java.lang.LinkageError:加载程序约束冲突:加载程序先前启动了对名为X的其他类型的加载,java,spring,Java,Spring,我不熟悉Spring并使用Spring 3.2.2。我通过注入了一些豆子,效果很好。现在我想通过@Autowired注入一些bean,但完全出了问题。我已经这样做了: beans.xml: <context:annotation-config /> <bean id="formulaFactory" class="my.project.formula.impl.GenericFormulaFactory" factory-method="getInstance">
注入了一些豆子,效果很好。现在我想通过@Autowired
注入一些bean,但完全出了问题。我已经这样做了:
beans.xml:
<context:annotation-config />
<bean id="formulaFactory" class="my.project.formula.impl.GenericFormulaFactory"
factory-method="getInstance">
<qualifier value="formulaFactory"></qualifier>
</bean>
(更改限定符或不使用限定符没有任何区别…)
我得到了这个错误:
java.lang.LinkageError:加载程序约束冲突:加载程序(org/springframework/context/support/ContextTypeMatchClassLoader$ContextOverridingClassLoader的实例)先前启动了名为“my/project/FormulaKey/FormulaKey”的不同类型的加载。
我想知道为什么会出现这个错误。尤其是类型FormulaKey
让我恼火。当我将@Autowired
注释与其他bean一起使用时,它可以工作
我必须提到,我通过getInstance
方法将GenericFormulaFactory实现为单例。也许这会引起一些问题
该应用程序是一个独立的应用程序。我也检查了所有jar的重复性,我不认为这是问题的原因,因为错误与我自己的类有关
问候,,
奥利弗
更新:
我在不知道是什么原因的情况下删除了错误
我所做的:
constructor arg
)@Autowired
注释一起使用
xml:
仍然想知道为什么首先会出现错误。在工厂的实现中,使用
FormulaKey
作为键创建了一个HashMap
,因此这可能会造成麻烦。如果有人知道答案,我真的很想知道。以下是我目前能收集到的信息:
java.lang.LinkageError
出现在加载类时涉及两个类加载器的情况下my.project.formula.FormulaKey
由一个类加载器加载,然后参与注释处理的类加载器再次加载它my.project.formula.FormulaKey
的加载会延迟,因为从XML加载上下文时不再引用它你还在调用
DefaultFormulaHandler
constructor中的GenericFormulaFactory.getInstance()
。现在它被注入。这意味着当类my.project.formula.FormulaKey
在spring容器加载bean时不再加载。???我不理解你的评论。从错误消息中,我假设先前加载了ContextOverridingClassLoader
,但这到底是个什么问题呢?感谢您的研究!我可以补充一点,由于我自己的工厂单例实现,FormulaKey
类似乎在启动应用程序时被加载,然后又被@Autowire
注释加载。通过将单例初始化移到Spring(以及类加载),问题似乎得到了解决,因为Spring可以处理所有的类加载。是的。这似乎就是发生的事情。
@Autowired
@Qualifier("formulaFactory")
private FormulaFactory formulaFactory;
<bean id="formulaHandler" class="my.project.formula.impl.DefaultFormulaHandler">
<constructor-arg ref="formulaFactory" />
</bean>
<bean id="formulaFactory" class="my.project.formula.impl.GenericFormulaFactory" />