SpringMVC自動掃描@Controller註解的bean
阿新 • • 發佈:2019-02-17
若要對@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的配置檔案中