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的配置文件中

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容