私はSpringが初めてで、Spring 3.2.2を使用しています。私は正常に動作するように注入したいくつかの豆を持ってい<constructor-arg>
ます。今、私はビーンを注入したかったのですが、@Autowired
それは完全にうまくいきませんでした。私はこれをしました:
ビーンズ.xml:
<context:annotation-config />
<bean id="formulaFactory" class="my.project.formula.impl.GenericFormulaFactory"
factory-method="getInstance">
<qualifier value="formulaFactory"></qualifier>
</bean>
Java ソース:
@Autowired
@Qualifier("formulaFactory")
private FormulaFactory formulaFactory;
(修飾子を変更しても省略しても違いはありませんでした...)
そして、私はこのエラーを受け取ります:
java.lang.LinkageError: loader constraint violation: loader (instance of org/springframework/context/support/ContextTypeMatchClassLoader$ContextOverridingClassLoader) previously initiated loading for a different type with name "my/project/formula/FormulaKey"
なぜこのエラーが発生するのだろうか。特にFormulaKey
イライラするタイプです。@Autowired
注釈を他の Bean で使用すると、機能します。
GenericFormulaFactory をgetInstance
メソッド経由でシングルトンとして実装したことを言及する必要があります。多分それはいくつかの問題を引き起こしますか?
アプリケーションはスタンドアロン アプリです。すべての jar の重複もチェックしましたが、エラーは自分のクラスに関連しているため、これが問題の原因であるとは思いません。
よろしく、 オリバー
更新: 原因がわからないままエラーを削除しました。
私がしたこと:
- ファクトリ実装の getInstance() メソッドとシングルトンの性質を削除します
- ファクトリー・インターフェースをハンドラー・クラスのコンストラクター (および
constructor-arg
xml)に追加しました
これで、xml を使用して実装を構成し、@Autowired
注釈と共に使用することもできます。
xml:
<bean id="formulaHandler" class="my.project.formula.impl.DefaultFormulaHandler">
<constructor-arg ref="formulaFactory" />
</bean>
<bean id="formulaFactory" class="my.project.formula.impl.GenericFormulaFactory" />
そもそもなぜエラーが発生したのか、まだ疑問に思っています。ファクトリの実装では、キーとして aHashMap
を作成してFormulaKey
いたので、これが原因だったのかもしれません。誰かが答えを知っているなら、私は本当にそれを知りたいです.