这两个元素的目的完全不同。
<context:component-scan />
顾名思义,它用于组件扫描。它通过为与所有豆类默认扫描@Component
注释(或类似的“亚健康”的注解@Controller
,@Service
等等)。它将仅在应用程序上下文中将这些类的实例注册为bean。就这些。
<mvc:annotation-driven />
用于引导Spring MVC,并且除其他外,它注册aRequestMappingHandlerMapping
和RequestMappingHandlerAdapter
。第一个将请求链接到某个方法(@RequestMapping
带@Controller
注释的类中方法的注释)。最后一个知道如何执行带有注释的方法@RequestMaping
。
现在<mvc:annotation-driven />
不执行任何扫描或检测@Controllers
应用程序上下文中是否没有内容的操作,因此不进行任何请求映射。现在,您有几种在应用程序上下文中注册这些bean的方法,其中一种是上述方法<context:component- scan />
。
基本上@Controller
没有<mvc:annotation-driven />
,没错,是没什么用,因为它不只是占用内存。它不会绑定到传入的请求,而只是在应用程序上下文中徘徊。它只是所有其他bean一样的另一个bean,并没有对其进行任何特殊处理。(最近但已弃用的Spring版本会注册DefaultAnnotationHandlerMapping
处理的@Controller
,但已弃用)。