<context:component-scan/>和<mvc:annotation-driven/>的区别
1 <context:annotation-config/>
- 如果你想使用
@Autowired注解,那么就必须事先在 spring 容器中声明 AutowiredAnnotationBeanPostProcessor Bean. - 如果想使用
@Resource,@PostConstruct,@PreDestroy等注解就必须声明CommonAnnotationBeanPostProcessor - 如果想使用
@PersistenceContext注解,就必须声明PersistenceAnnotationBeanPostProcessor的Bean. - 如果想使用
@Required的注解,就必须声明RequiredAnnotationBeanPostProcessor的Bean.
使用<context:annotation- config/>隐式地向 Spring容器注册这4个BeanPostProcessor :
AutowiredAnnotationBeanPostProcessor
RequiredAnnotationBeanPostProcessor
CommonAnnotationBeanPostProcessor
PersistenceAnnotationBeanPostProcessor
即<context:annotation-config/>是用来使上述注解起作用的,也就是说激活已经在application context中注册的bean.
之所以这样说是因为<context:annotation-config/>仅能够在spring容器中已经注册过的bean上面起作用.对于没有在spring容器中注册的bean,它并不能执行任何操作,也就是说如果你并没有spring容器中注册过bean(spring配置文件中配置bean就是注册),那么上述的那些注解并不会在你未注册过的bean中起作用.
2 <context:component-scan>
<context:component-scan>做了<context:annotation-config>要做的事情,还额外支持@Component,@Repository,@Service,@Controller注解.并且<context:component-scan>扫描base-package并且在applicationcontext中注册扫描的beans.
所以配置<context:component-scan>就不需要配置<context:annotation- config/>
3 <mvc:annotation-driven/>
至于该项看前缀就应该知道是springmvc所需要的注解.
<mvc:annotation-driven/>相当于注册了DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter两个bean,配置一些messageconverter.即解决了@Controller注解的使用前提配置.
我们找到对应的实现类是:
org.springframework.web.servlet.config.AnnotationDrivenBeanDefinitionParser.
通过阅读类注释文档,我们发现这个类主要是用来向工厂中注册了
RequestMappingHandlerMapping
BeanNameUrlHandlerMapping
RequestMappingHandlerAdapter
HttpRequestHandlerAdapter
SimpleControllerHandlerAdapter
ExceptionHandlerExceptionResolver
ResponseStatusExceptionResolver
DefaultHandlerExceptionResolver
上面几个Bean实例.这几个类都是用来做什么的呢?
前两个是HandlerMapping接口的实现类,用来处理请求映射的.
- 其中第一个是处理
@RequestMapping注解的. - 第二个会将controller类的名字映射为请求url.
中间三个是用来处理请求的.具体点说就是确定调用哪个controller的哪个方法来处理当前请求.
- 第一个处
理@Controller注解的处理器,支持自定义方法参数和返回值(很酷). - 第二个是处理继承HttpRequestHandler的处理器.
- 第三个处理继承自Controller接口的处理器.
后面三个是用来处理异常的解析器.
另外还将提供以下支持:
① 支持使用ConversionService实例对表单参数进行类型转换;
② 支持使用@NumberFormatannotation,@DateTimeFormat注解完成数据类型的格式化;
③ 支持使用@Valid注解对Java bean实例进行JSR 303验证;
④ 支持使用@RequestBody和@ResponseBody注解
转自:https://blog.csdn.net/caolaosanahnu/article/details/17305135
<context:component-scan/>和<mvc:annotation-driven/>的区别的更多相关文章
- jsp中的@include与jsp:include区别详解
1 前言 搞java开发的人也许都知道在jsp中引入项目中其他文件有如下两种方式 <%@include file="xxx.jsp"%> <jsp:include ...
- [转]<jsp:include>和<%@include%>的区别
首先,转发自yangbobo1992的 <jsp:include>和<%@include%>的区别 这个是我见过写的最好的之一 <%@include%>和<j ...
- <%@page include%>、<%@include%>、<jsp:include>三者之间的本质区别
<%@page include%>.<%@include%>.<jsp:include>三者之间的本质区别 先从它的几个内置对象说起. application和se ...
- JSP 中动态 INCLUDE 与静态 INCLUDE 的区别?
一.静态包含指令<%@include file="fileurl"%> 两个jsp页面的<%@page contentType="text/html:c ...
- JSP中的include有哪些?有什么区别?
JSP中的include有哪些?有什么区别? 1.JSP中的include有哪些 (1)<%@include file="" %> (2)<jsp:include ...
- jsp中静态include和动态include的区别
jsp中静态include和动态include的区别 动态 INCLUDE 用 jsp:include 动作实现 <jsp:include page="included.jsp&quo ...
- JSP指令include和JSP动作元素include的区别
include指令用于在JSP页面静态的包含一个文件,该文件可以是JSP页面.HTML页面.文本文件或者一段java代码.使用include指令的JSP页面在转换时,JSP容器会在其中插入所包含文件的 ...
- <jsp:include>和<%@include file=""%>的区别(简单了解)
简单了解 include指令是编译阶段的指令,即include所包含的文件的内容是编译的时候插入到JSP文件中,JSP引擎在判断JSP页面未被修改,否则视为已被修改.由于被包含的文件是在编译时才插入的 ...
- 牛客网Java刷题知识点之什么是JSP的3大常用指令、JSP的6大哪些动作、JSP中include指令和include动作有什么区别
不多说,直接上干货! JSP的3大常用指令 包含指令(Include directive):用来包含文件和合并文件内容到当前的页面. 页面指令(Page directive):用来定义JSP页面中特定 ...
- JSP中动态include和静态include区别
静态include(<%@ include file=""%>): 静态include(静态导入)是指将一个其他文件(一个jsp/html)嵌入到本页面 jsp的inc ...
随机推荐
- 【剑指Offer】【树】二叉树的镜像
题目:操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 1 ...
- pytorch中 model.cuda的作用
在pytorch中,即使是有GPU的机器,它也不会自动使用GPU,而是需要在程序中显示指定.调用model.cuda(),可以将模型加载到GPU上去.这种方法不被提倡,而建议使用model.to(de ...
- Python 获取IP地址
import socket def get_host_ip(): """ 查询本机ip地址 :return: """ try: s=sock ...
- laravel 插件库网站
1.https://packagist.org 2.http://packalyst.com
- 第三课 Hello World显示
HelloWorld 1.新建文件件 2.新建java文件 3.编写代码 public class Hello{ public static void main(String[] args){ Sys ...
- Java中的super和this关键字——
super与this关键字 先总结再解释: super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类. this关键字:指向自己的引用. super注意点: 1.s ...
- C#中的范围类型(Range Type)
//语法糖Rangestatic void Main(string[] args) { var myArray = new string[] { "Item1", "It ...
- #硬件 #资讯 #科普 #短报 SSD价格跳水根本停不下来!不断刷出新低
一份来自日本的统计显示,10~12月的初步统计显示,PC市场的指标产品中,256GB TLC颗粒SSD价格再次下跌2美元,现在只有29.5美元.这已经是该指标产品连续5个季度下跌,创下史上心底记录,同 ...
- python-官网下载安装教程
1.官网地址:https://www.python.org/ 2.点击Downloads,选择Windows版本 3.找到对应版本,这里以3.9.12为例,选择结尾为executable instal ...
- 狐漠漠养成日记 Cp.00002 第一周
主要目标 (1)考研 考研数学二16-22年的真题卷(已完成真题卷:0/7) 记忆考研英语中高频词汇(已记忆词汇:高频:0/10:中频:0/10) 考研英语二16-22年的真题卷(已完成真题卷:0/7 ...