一、<context:annotation-config> 和 <context:component-scan>

<context:annotation-config>的作用:将已经在spring容器中注册的bean激活。实际含义是,使注解能使用已经在spring容器中注册的过的bean,不论是通过xml配置和通过包扫描注册的bean,都包含在内。

<context:component-scan>的作用:在<context:annotation-config>的基础上,可以扫描指定包,将包含注解的类注册到spring容器中。如:<context:component-scan base-package="ki"/>。

二、<mvc:annotation-driven>

<mvc:annotation-driven>会自动注册RequestMappingHandlerMapping与RequestMappingHandlerAdapter两个Bean,这是Spring MVC为@Controller分发请求所必需的,并且提供了数据绑定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持读写XML的支持(JAXB)和读写JSON的支持(默认Jackson)等功能。

我们找到对应的实现类是:

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注解

三、<mvc:default-servlet-handler />和<mvc:resources />

这两个注解都是用来处理静态资源的,其实不使用它们也可以访问静态资源,那么使用这两个注解的意义是什么。

这其实是书写规范的问题,其强调HTTP应当以资源为中心,并且规范了URI的风格,这种书写规范不希望待.html或.do等后缀,但是早期的Spring MVC不能很好的处理静态资源,所以在请求映射里,不会使用/,而通常使用*.do等的方式。

所以为了,规范,为了使用/的请求映射,新加了这两个功能。

当使用*.do的后缀时,spring在找不到相应的映射处理时,会按照请求路径查找静态资源路径。但是,在使用/的映射处理时,spring容器会将所有的请求当成映射路径,不回去查找资源文件,处理这种情况,就用到了这两个注解。

1、<mvc:default-servlet-handler />

在springMVC-servlet.xml中配置<mvc:default-servlet-handler />后,会在Spring MVC上下文中定义一个org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler,它会像一个检查员,对进入DispatcherServlet的URL进行筛查,如果发现是静态资源的请求,就将该请求转由Web应用服务器默认的Servlet处理,如果不是静态资源的请求,才由DispatcherServlet继续处理。

一般Web应用服务器默认的Servlet名称是"default",因此DefaultServletHttpRequestHandler可以找到它。如果你所有的Web应用服务器的默认Servlet名称不是"default",则需要通过default-servlet-name属性显示指定:

<mvc:default-servlet-handler default-servlet-name="所使用的Web服务器默认使用的Servlet名称" />

2、<mvc:resources />

<mvc:default-servlet-handler />将静态资源的处理经由Spring MVC框架交回Web应用服务器处理。而<mvc:resources />更进一步,由Spring MVC框架自己处理静态资源,并添加一些有用的附加值功能。

<mvc:resources />通过location和mapping参数,可以访问项目中的任何一处静态资源。

<mvc:resources location="/,/css/,/WEB-INF/classes/,/WEB-INF/classes/,classpath:/" mapping="/resources/**/"/>

location属性:项目内的文件路径(部署后的路径),其中classpath:/等同于/WEB-INF/classes/。

mapping属性:将项目内的实际路径,映射到的一个虚拟的用于请求静态资源的路径。

注意:每个location路径只能报该文件夹下的资源文件映射到mapping,如:/只能映射项目根目录下的资源文件,而不能映射跟目录下的css文件夹下的目录,必须新加一个/css/的配置。

配置完成后,当要请求静态资源路径时:

例如 ,在跟目录径下的css文件夹下有个style.css,那么请求路径就是:http://localhost:8080/ssm-login/resources/style.css

即使是WEB-INF下的文件,也可以得到,WEB-INF下的login.jsp的请求路径:http://localhost:8080/ssm-login/resources/login.jsp

 四、 <tx:annotation-driven transaction-manager="" />

含义为:支持使用注解来进行实物管理,并指定一个事务管理器。

<util:properties id="cfg" location="classpath:config.properties"/>
<!--配置DruidDataSource连接池 -->
<bean id="ds" class="com.alibaba.druid.pool.DruidDataSource"
destroy-method="close" init-method="init" lazy-init="true">
<property name="driverClassName" value="#{cfg.driver}" />
<property name="url" value="#{cfg.url}" />
<property name="username" value="#{cfg.username}" />
<property name="password" value="#{cfg.password}" />
<!-- 初始化连接大小 -->
<property name="initialSize" value="#{cfg.initialSize}" />
<!-- 连接池最大数量 -->
<property name="maxActive" value="#{cfg.maxActive}" />
<!-- 连接池最小空闲 -->
<property name="minIdle" value="#{cfg.minIdle}" />
<!-- 获取连接最大等待时间 -->
<property name="maxWait" value="#{cfg.maxWait}" />
</bean> <!-- 事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="ds" />
</bean>
<!-- 支持使用注解来进行事务管理 -->
<tx:annotation-driven transaction-manager="transactionManager" />

spring注解的相关配置的更多相关文章

  1. 转-spring boot web相关配置

    spring boot web相关配置 80436 spring boot集成了servlet容器,当我们在pom文件中增加spring-boot-starter-web的maven依赖时,不做任何w ...

  2. spring boot web相关配置

    spring boot集成了servlet容器,当我们在pom文件中增加spring-boot-starter-web的maven依赖时,不做任何web相关的配置便能提供web服务,这还得归于spri ...

  3. 【转】spring boot web相关配置

    spring boot集成了servlet容器,当我们在pom文件中增加spring-boot-starter-web的maven依赖时,不做任何web相关的配置便能提供web服务,这还得归于spri ...

  4. Spring注解(赋值相关)

    上面是与生命周期有关的内容,下面是属性赋值相关的: @Configuration public class ProperTyValueConfig { @Bean public Person pers ...

  5. Spring Data Solr相关配置

    1.增加Maven POM文件的存储库:pom配置如下: <repositories> <repository> <id>spring-milestone</ ...

  6. Spring Boot SSL [https]配置例子

    前言 本文主要介绍Spring Boot HTTPS相关配置,基于自签证书实现: 通过本例子,同样可以了解创建SSL数字证书的过程: 本文概述 Spring boot HTTPS 配置 server. ...

  7. Spring注解+Axis2开发WebService

    用Spring注解方式: 配置扫描指定包下的类 <context:component-scan base-package="包名" />   标识类为spring管理的 ...

  8. 使用spring注解@Controller @Service @Repository简化配置

    前言:在web项目中引入spring框架中的配置文件,我们给每一个java bean进行相关配置可以非常安全,便捷的管理我们的bean.那么,问题来了,如果一个项目中所涉及到的java bean十分庞 ...

  9. spring,mybatis事务管理配置与@Transactional注解使用[转]

    spring,mybatis事务管理配置与@Transactional注解使用[转] spring,mybatis事务管理配置与@Transactional注解使用 概述事务管理对于企业应用来说是至关 ...

随机推荐

  1. Java设计模式之单例模式,笔记完整到不敢想象

    单例模式: 作用 保证一个类只有一个实例,并且提供一个访问该实例的全局访问入口 单例模式的常用 1.Windows的任务管理器2.Windows的回收站,也是一个单例应用3.项目中的读取配置文件的对象 ...

  2. [SQL]LeetCode595. 大的国家 | Big Countries

    SQL架构 Create table If Not Exists World (name varchar(), continent varchar(), area int, population in ...

  3. Ubuntu12.04中的虚拟机安装Ubuntu16.04,并实现远程控制16.04

    目录 1.设置网络连接 1.1 VMware虚拟机网络地址设置 1.2 设置虚拟机内Ubuntu16.04的网络模式 未开机状态下 开机状态下 1.3 查看虚拟机中Ubuntu16.04的IP 2.进 ...

  4. Jmeter-常用线程组设置及场景运行时间计算

    Jmeter中通过线程组来模拟大用户并发场景,今天主要介绍三个常用的线程组,帮助我们设计更加完善的测试场景,另外介绍下场景执行时间如何计算. 一.Thread Group 取样器错误后要执行的动作   ...

  5. C#基础语法

    究极入门之Hello world static void Main(string[] args) { //你好,世界 Console.WriteLine("HELLO WORLD" ...

  6. python-redistest

    # !/usr/bin/python3.4 # -*- coding: utf-8 -*- import redis import time # 这里用来读取ip def getips(): ip = ...

  7. 服务器Windows 2008R2 C盘清理

    今天因为连服务器的时间慢了很多,然后看了一下C盘的空间,OMG剩下222K.然后一直上网找解决方案. 按照惯例,应该开一个360看看,C盘清理啊,搬家什么的.360告知的竟然是没有可以搬移的,所以,这 ...

  8. Python爬虫入门教程 19-100 51CTO学院IT技术课程抓取

    写在前面 从今天开始的几篇文章,我将就国内目前比较主流的一些在线学习平台数据进行抓取,如果时间充足的情况下,会对他们进行一些简单的分析,好了,平台大概有51CTO学院,CSDN学院,网易云课堂,慕课网 ...

  9. Ajax上传图片以及上传之前先预览

    手头上有几个小项目用到了easyUI,一开始决定使用easyUI就注定了项目整体上前后端分离,基本上所有的请求都采用Ajax来完成.在文件上传的时候用到了Ajax上传文件,以及图片在上传之前的预览效果 ...

  10. Lucene 04 - 学习使用Lucene的Field(字段)

    目录 1 Field的特性 2 常用的Field类型 3 常用的Field种类使用 3.1 准备环境 3.2 需求分析 3.3 修改代码 3.4 重新建立索引 1 Field的特性 Document( ...