The*_*ger 9 java spring spring-mvc
我一直在研究使用mvc:annotation-driven标签时我们有哪些额外的功能,我很难消化结果,特别是在@Controller注释方面.我知道这与这个问题非常相似,但请听我说.
根据Spring文档
@Controller注释的基本目的是充当带注释的类的构造型,指示其角色.调度程序将扫描这些带注释的类以查找映射方法,检测@RequestMapping注释(请参阅下一节).
然后,文档继续显示上下文:component-scan标记提供此支持.所以这一切都很好,但后来我看着mvc:annotation-driven给了我们什么,上面提到的stackoverflow 问题提供了以下答案
mvc:annotation-driven声明显式支持注释驱动的MVC控制器(即@RequestMapping,@ Controller,虽然支持这些是默认行为),并通过@Valid添加对declrative验证的支持,并使用@RequestBody添加消息体编组/ ResponseBody.
这对我来说似乎有点多余.也许我得不到这种明确的支持.再次,回顾官方的Spring 文档,我们得到以下内容
[mvc:annotation-driven]注册Spring MVC将请求分派给@Controllers所需的DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter bean.
这听起来与我从文档中提供的最后一个例子非常相似.如果任何人都可以提供一些关于我们如何使用@Controller注释只使用上下文:component-scan标签,一些限制是什么,那么我们在添加mvc:annotation-driven时获得的附加功能的示例标签,我认为这将非常有帮助.在此先感谢任何支持.
M. *_*num 17
这两个元素的用途完全不同.
<context:component-scan />顾名思义,就是组件扫描.它通过为与所有豆类默认扫描@Component注释(或"亚健康"的注解一样@Controller,@Service等等).它只会将应用程序上下文中这些类的实例注册为bean.就这些.
<mvc:annotation-driven />是用于引导Spring MVC,它注册了a RequestMappingHandlerMapping和RequestMappingHandlerAdapter.第一个链接请求到某个方法(注释类中的@RequestMapping方法的@Controller注释).最后一个知道如何执行带注释的方法@RequestMaping.
现在<mvc:annotation-driven />不执行任何扫描或检测@Controllers应用程序上下文中是否存在任何请求映射.现在,您可以通过多种方式在应用程序上下文中注册这些bean,其中之一就是前面提到的<context:component-scan />.
基本上@Controller没有<mvc:annotation-driven />,很好,没有用,因为它只会占用记忆.它不会绑定到传入的请求,它只是在应用程序上下文中挂起.它只是像所有其他bean一样的另一个bean,并没有做任何特别的事情.(最近,但已弃用的Spring版本注册了DefaultAnnotationHandlerMapping处理它的版本,但这已@Controller被弃用).
该context:component-scan元素列出了Spring应该扫描@Controller注释的包(在base-package属性中).
在mvc:annotation-driven没有这样的属性.这是一个便利元素,它将许多默认MVC元素安装到应用程序上下文中.这些元素在Spring框架参考的第16.14.1节中列出.此元素似乎不扫描@Controller注释.
与普遍看法相反,这些元素之间没有依赖关系.没有问题的@Controller mvc:annotation-driven将正常运行并处理HTTP请求就好了,只要您包含context:component-scan了适当的base-package属性即可.
| 归档时间: |
|
| 查看次数: |
11575 次 |
| 最近记录: |