解決Error creating bean with name XXX: Injection of resource dependencies failed
解決SSH整合時出現的錯誤,錯誤如上圖所示。
該錯誤是因為Mybatis中需要的註解,spring沒有檢測到此註解資訊。
錯誤原因可能有四處:
(1):web.xml沒有配置spring的上下文環境和核心的監聽器
解決辦法:
在web.xml新增
<!--spring的上下文-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext-common.xml</ param-value>
</context-param>
<!--spring的核心監聽器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
(2):SpringMVC的核心配置檔案中沒有正確配置掃描器,如果專案需要用到註解的包,那麼這個包都需要配置註解掃描器
解決辦法:
第一種寫法:在springmvc-config.xml新增:
<context:component-scan base-package="com.zs.controller" />
<context:component-scan base-package="com.zs.services" />
第二種寫法:在springmvc-config.xml新增(com.zs包下的所有類都能掃描到):
<context:component-scan base-package="com.zs"></context:component-scan>
(3):正確的配置註解掃描器,也需要在相應的類上標明該類的註解,如果不標明,專案啟動的時候就無法識別該類的註解,然後在別處呼叫該類,也會報此錯。
解決辦法:
為需要註解的類新增自動掃描@Service、 @Controller等
具體需要哪一種,請看官方文件解釋:Spring 2.5引入了更多典型化註解(stereotype annotations):
@Component、@Service和 @Controller。@Component是所有受Spring管理元件的通用形式;而@Repository、@Service和 @Controller則是@Component的細化,用來表示更具體的用例(例如,分別對應了持久化層、服務層和表現層)。也就是說,你能用@Component來註解你的元件類,但如果用@Repository、@Service 或@Controller來註解它們,你的類也許能更好地被工具處理,或與切面進行關聯。例如,這些典型化註解可以成為理想的切入點目標。當然,在Spring Framework以後的版本中, @Repository、@Service和 @Controller也許還能攜帶更多語義。如此一來,如果你正在考慮服務層中是該用@Component還是@Service,那@Service顯然是更好的選擇。同樣的,就像前面說的那樣, @Repository已經能在持久化層中進行異常轉換時被作為標記使用了。”
(4):前面幾種可能出現的情況你都沒有發生,那麼可能是你在配置多個自動註解的類,自動註解的類的唯一識別符號重複。
解決辦法:將每個需要自動註解類的識別符號修改為不同的,因為在呼叫的時候,不是型別@Autowired自動注入,則是 @Resource(name = “studentService”,type = com.zs.services.Impl.StudentServiceImpl.class)這種方式注入,是根據name來找到註解類的,所以name必須不同。
一般情況下是這幾個地方出了錯,細心檢查一下哦~
說在最後的話:編寫實屬不易,若喜歡或者對你有幫助記得點贊+關注或者收藏哦~