2016-09-18 28 views
0

私は自分のプロジェクトで使用されているサーブレットフィルタを提供するサードパーティの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。

+2

あなたは本当にすべきではありません。 – chrylis

答えて

0

Springで管理されている2つのBean間の作成順序を確実にしたい場合は、depends-onを使用できます。 XMLで

:注釈で

<bean id="beanOne" class="ExampleBean" depends-on="manager"> 
    <property name="manager" ref="manager" /> 
</bean> 

:一般的に

@DependsOn 

:リフレクション経由でサードパーティのフィルタを変更することは良い考えのような音はありません。可能であれば、代替の解決策を見つけることを試みるべきです。この作業を行った後でも、依存関係のそのバージョンでロックされ、新しいバージョンに安全に更新することはできません。おそらく、きれいな解決策を見つけるために別のSOの質問を掲示する価値があるでしょう。

+0

私はThirdPartyFilterが修飾子の属性ではないので、それが私のケースで依存の悪用であるかどうかを考えています。 –

+0

さて、私はあなたが約束しようとしているより大きな虐待を見ます。 :) –

関連する問題