我有一個第三方jar,它提供了一個在我的項目中使用的servlet過濾器。在servlet過濾器中有一個靜態塊初始化靜態對象。如何確保Spring Beans的加載順序?
我在做什麼是使用反射來檢索靜態對象並修改它。
的配置如下:
<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>
凡thirdPartyFilter以XML定義
<bean id="thirdPartyFilter" class="com.abc.ThirdPartyFilter" />
的ThirdPartyFilter簡單
class ThirdPartyFilter implements Filter{
private static BB bb = new BB();
static{
bb.setText("bb");
}
doFilter(){...}
}
我已經叫ThirdPartyFilterModifier的一類,在其中有一個使用反射操作的工廠bean在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的放在這個定義&之前。得到了相同的排序結果:首先是thirdPartyFilter,然後是thirdPartyFilterModifier。
你真的,真的不應該。 – chrylis