私は自分のプロジェクトで使用されているサーブレットフィルタを提供するサードパーティのjarファイルを持っています。サーブレットフィルタには、静的オブジェクトを初期化する静的ブロックがあります。Spring Beansの読み込み順序を保証するにはどうしたらいいですか?
私が行っていることは、静的オブジェクトを取得して修正するためにリフレクションを使用することです。私はすでに、ThirdPartyFilterModifierと呼ばれるクラスを持つXMLでthirdPartyFilterが定義されている
<filter>
<filter-name>thirdPartyFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>thirdPartyFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<bean id="thirdPartyFilter" class="com.abc.ThirdPartyFilter" />
ThirdPartyFilterはシンプル
class ThirdPartyFilter implements Filter{
private static BB bb = new BB();
static{
bb.setText("bb");
}
doFilter(){...}
}
に:
構成は以下の通りですそこには反射を使ってthirdPartyFilterで初期化されるオブジェクトBB。しかし、修飾子の定義は注釈を使用しています。アプリが起動している間、コンソールログを確認する
@configuration
class ThirdPartyFilterModifier{
@Bean
public BB reviseBB(){
// using reflection to retrieve bb and revise it.
return bb;
}
}
、私ははっきりThirdPartyFilterの静的ブロックが最初に印刷されたことを確認することができ、その後、ThirdPartyFilterModifierのファクトリーBeanは後で来ます。
これは私が期待している結果であると認めます。しかし、thirdPartyFilterModifierの前にthirdPartyFilterを確実にロードするために何もしなかったので、私は少し混乱します。
xmlと注釈の両方の設定で正しいことをしていると誰も指摘できますか?
//私はちょうどXML
<bean id="thirdPartyFilterModifier" class="com.mycom.ThirdPartyFilterModifier" factory-method="reviseBB" />
に注釈を変換しようとしたthirdPartyFilterの後&前に、この定義を置いている を更新しました。順序付けと同じ結果が得られます:firstPartyFilter、次にthirdPartyFilterModifier。
あなたは本当にすべきではありません。 – chrylis