2つのモジュールがあるとします。 1つはコアであり、もう1つはコア依存の実装モジュールです。 コアは、その依存実装モジュールの戦争のjarファイルです。私は春のBean構成のオーバーライド
<bean id="x" class="com.pokuri.X">
<property name="y" ref="y"/>
<property name="z" ref="z"/>
</bean>
のようにBeanを定義していると
public class X{
public void doSomeJob(){
.......
}
}
を次のようにそのクラスが、この方法は、いくつかのコアクラスから呼び出されるメソッドを持つコアで
。今私はコアの依存する実装のようにXのdoSomeJob()メソッドのロジックを変更する必要があります。そこで、このようなクラスを作成して、このようなクラスの別のアプリケーションコンテキストxmlファイルに同じidのBeanを定義しました。
<bean id="x" class="com.pokuri.ExtX">
<property name="y" ref="y"/>
<property name="z" ref="z"/>
</bean>
、我々はclasspath:springfolder
として値を指定するweb.xml
にcontextConfigLocation
コンテキストパラメータを使用してアプリケーションコンテキストを構築しています。
しかし、コアロジックでは、ExtX
ではなく、コアビーンインスタンスのみ(つまり、X
インスタンス)が取得されています。どのようにしてそのBean定義を上書きし、新しい拡張Bean定義を使用してシステムを起動させることができますか?
そして、異なるアプリケーションコンテキストファイル内の同じIDを使用して、最初に読み込まれたBean定義を、後で読み込まれたBean定義で上書きすると聞きました。 Bean定義にはpriority
種類の属性があります。同じIDのBeanが見つかった場合に、ApplicationContextが優先度の高いものを優先度の低いものよりも優先させるようにします。
はそれが動作します。もちろん、あなたのアプローチ – Pokuri
をしようとします。しかし、ある定義を別の定義でカバーするのは良い習慣ですか?私はそれがハックの一種だと思う:/ –