1. 程式人生 > >【Spring】Service 注入失敗,空指標

【Spring】Service 注入失敗,空指標

service層的類都有用@Service標識,但報空指標,注入失敗,很可能是因為springapplication配置和springmvc的配置檔案配置錯誤,導致容器衝突了。

springspringmvc整合後,專案會有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

controller並初始化,接著,springmvc容器初始化時,就會將spring容器中的controller例項覆蓋掉。這個時候就會出錯了,新的controller例項中的service就會出現找不到例項的情況。

所以解決方法是,2個容器掃描的包必須相互區分,互不干擾。spring容器掃描非controller的例項,而springmvc容器掃描controller的例項就行。