在專案啟動時,***listener最先初始化,然後是過濾器filter,最後是servlet。
spring***在啟動時會讀取spring配置檔案,進行spring容器的初始化。springmvc的dispatcherservlet初始化時會讀取springmvc的配置檔案,進行springmvc容器的初始化。spring容器初始化時會例項化各個bean。(個人認為web容器初始化時其中的各元素是按上述順序依次初始化的,其他元素全部初始化完成之後web容器才初始化完成。但目前沒有看到過乙個十分確切的說法,等以後有時間研究一下原始碼)。
網上很多資料說在過濾器中拿不到spring注入的bean,原因是過濾器初始化時spring容器還沒初始化好,其實並不是。下面看一段**:
在web.xml中定義過濾器:
demofilterfilter-name>
xx.framework.filter.demofilterfilter-class>
filter>
demofilterfilter-name>
/*
然後在過濾器的初始化方法init中:
@overridepublic
void
init(filterconfig filterconfig) throws servletexception
delegatingfilterproxyfilter-name>
org.springframework.web.filter.delegatingfilterproxyfilter-class>
param>
targetbeannameparam-name>
demofilterparam-value>
param>
param>
targetfilterlifecycleparam-name>
true
param-value>
param>
filter>
delegatingfilterproxyfilter-name>
/*
然後在spring容器中配置demofilter這個bean:
class="xx.framework.filter.demofilter" />
在dofilter方法中可以獲取到注入的bean了:
@override
public
void
dofilter(servletrequest req, servletresponse resp, filterchain filterchain) throws ioexception, servletexception
其中redistemplate是通過@resource註解注入進來的。 springBoot過濾器注入Bean的空指標問題
在過濾器中的dofilterinternal寫業務 時,需要用到spring bean元件,發現在過濾器中無法初始化bean元件,均為nullpointexception,經檢查掃瞄包路徑沒問題。最終確定容器載入順序引發的問題,在web.xml中各個元素的執行順序是這樣的,context param...
Java Filter過濾器使用
1 建立乙個servlet並且實現filter介面 該類需要實現filter介面中的init dofilter destory 方法 其中init 方法自動在專案啟動的時候載入,dofilter 在呼叫xml配置的路徑是載入,destory 方法在退出專案的時候進行。public class tes...
過濾器Filter中注入類Bean
delegatingfilterproxy管理過濾器 間的聯絡 filterchainproxy 過濾器鏈 這是一種繁瑣的方式,會讓web.xml顯得十分雜亂,如果我們配置了太多過濾器的話。我們最好新增乙個單獨的入口,在web.xml中,然 web.xml配置 contextconfiglocati...