【Spring】Service 注入失敗,空指標
阿新 • • 發佈:2019-01-03
service層的類都有用@Service標識,但報空指標,注入失敗,很可能是因為spring的application配置和springmvc的配置檔案配置錯誤,導致容器衝突了。
spring和springmvc整合後,專案會有2個容器,一個是spring容器,一個是springmvc容器
spring容器是父容器,springmvc容器是spring容器的子容器。
spring容器初始化後,springmvc再進行初始化,並將spring容器作為它的父容器。
子容器能夠訪問父容器的bean,而反之不行。
兩個容器的關係大概就是上述文字所表達的。
如果spring的配置檔案application.xml
<context:component-scanbase-package="com.test.*"/>
此路徑和
springmvc配置檔案中
<context:component-scanbase-package="com.test.*"/>
路徑一致,或者是父容器初始化的路徑包括了子容器。
那麼,當springmvc容器初始化時,如果發現有相同的類,會將新初始化的例項覆蓋spring容器中已經存在的例項,這可能會導致注入失敗,空指標的問題。
假如我們的controller裡面引用了service,並且spring的配置檔案初始化時掃描了全部的例項包括springmvc
所以解決方法是,2個容器掃描的包必須相互區分,互不干擾。spring容器掃描非controller的例項,而springmvc容器掃描controller的例項就行。