1. 程式人生 > >SpringMVC自動掃描@Controller註解的bean

SpringMVC自動掃描@Controller註解的bean

若要對@Controller註解標註的bean進行自動掃描,必須將<context:component-scan base-package="包路徑.controller"/>放置在dispatcherservlet的配置檔案中,若配置在ContextLoaderListener的配置檔案applicationContext.xml中則不起作用

複製程式碼
<!-- 上下文配置檔案 -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value
>classpath:config/spring/spring-*.xml</param-value> </context-param> <!-- 監聽器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
複製程式碼

 在SpringMVC中@Controller註解的bean必須由DispatcherServlet初始化的children webApplicationContext來管理,

複製程式碼
<servlet>
    <servlet-name>console</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:config/spring/dispatcher-servlet.xml
</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
複製程式碼

在DispatcherServlet初始化的context中會掃描當前容器所有的bean例項,根據類級別以及方法級別的對映資訊註解組裝成對應的HandleMappering資訊,但是ContextLoaderListener是不具備這個功能的。

contextLoaderListener對@Service是可以掃描的,可以理解為,由DispatcherServlet載入相當於在ContextLoaderListener載入的基礎上增加了controller的處理,所以DispatcherServlet載入的controller和bean都好用,ContextLoaderListener載入的bean好用而controller不好用

web層controlller配置檔案最好獨立於其他業務bean配置檔案,所以一般將對@Controller的自動掃描配置在DispatcherServlet的配置檔案中,而將對@Service和@Repository的掃描配置在ContextLoaderListener的配置檔案中