在前面的web.xml详解里,我们引入applicationContext.xml和springMVC.xml两个配置文件,

前者是spring 全局配置文件,用来控制spring 特性的,

后者则是springMVC里面的,用来作前端控制器、拦截uri转发view,

applicationContext.xml详解

Spring的主要目的还是因为Spring能充当我们容器管理的作用,这个作用主要体现在:

控制反转: Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。

面向切面的编程(AOP): Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。

容器: Spring 包含并管理应用中对象的生命周期和配置。

MVC框架: Spring的WEB框架是个精心设计的框架,是Web框架的一个很好的替代品。

事务管理: Spring 提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA)。

异常处理: Spring 提供方便的API把具体技术相关的异常(比如由JDBC,Hibernate or JDO抛出的)转化为一致的unchecked 异常。

applicationContext.xml作为spring 全局配置文件,其配置内容也应该跟其作用相关,

spring有两个核心接口:BeanFactory和ApplicationContext,其中ApplicationContext是BeanFactory的子接口。他们都可代表Spring容器,Spring容器是生成Bean实例的工厂,并且管理容器中的Bean。

Bean是Spring管理的基本单位,在基于Spring的Java EE应用中,所有的组件都被当成Bean处理,包括数据源、hibernate的SessionFactory、事务管理器等。

1.表明xml的版本

<?xml version="1.0" encoding="UTF-8"?>

2.beans是applicationContext.xml的根元素,其包含所有子元素;

xmlns以及xsi相当于beans的元素,后面的连接帮忙定位引进相关模式文件

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
</beans>

3.自动扫描,设置使用注解的类所在的包 主要是dao层和service层,剔除controller层注解扫描

    <context:component-scan base-package="zzj.lxy">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

4.配置数据库相关参数properties的属性:${url}

<context:property-placeholder location="classpath:porperties/jdbc.properties"/>

porperties/jdbc.properties内容如下:

jdbc.driver=com.mysql.jdbc.Driver
#数据库地址
jdbc.url=jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=utf8
#用户名
jdbc.username=root
#密码
jdbc.password=123456
#最大连接数
c3p0.maxPoolSize=30
#最小连接数
c3p0.minPoolSize=10
#关闭连接后不自动commit
c3p0.autoCommitOnClose=false
#获取连接超时时间
c3p0.checkoutTimeout=10000
#当获取连接失败重试次数
c3p0.acquireRetryAttempts=2

5.数据库连接池

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="maxPoolSize" value="${c3p0.maxPoolSize}"/>
<property name="minPoolSize" value="${c3p0.minPoolSize}"/>
<property name="autoCommitOnClose" value="${c3p0.autoCommitOnClose}"/>
<property name="checkoutTimeout" value="${c3p0.checkoutTimeout}"/>
<property name="acquireRetryAttempts" value="${c3p0.acquireRetryAttempts}"/>
</bean>

6.配置SqlSessionFactory对象

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入数据库连接池 -->
<property name="dataSource" ref="dataSource"/>
<!-- 扫描model包 使用别名 -->
<property name="typeAliasesPackage" value="zzj.lxy.dao"/>
<!-- 扫描sql配置文件:mapper需要的xml文件 -->
<property name="mapperLocations" value="classpath:zzj/lxy/dao/*.xml"/>
</bean>

7.MapperScannerConfigurer扫描包下的mybatis的mapper接口,然后和mybatis的sqlxml映射文件产生代理对象,最后注入到springIoc容器里面

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 注入sqlSessionFactory -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<!-- 给出需要扫描Dao接口包 -->
<property name="basePackage" value="zzj.lxy.dao"/>
</bean>

8.配置事务管理器

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 注入数据库连接池 -->
<property name="dataSource" ref="dataSource"/>
</bean>

9.配置基于注解的声明式事务

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

springMVC.xml详解

springMVC.xml作为springMVC的配置文件,其配置也是与springMVC功能相关,我们先来回顾下springMVC的运行流程:

1、  用户发送请求至前端控制器DispatcherServlet。

2、  DispatcherServlet收到请求调用HandlerMapping处理器映射器。

3、  处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。

4、  DispatcherServlet调用HandlerAdapter处理器适配器。

5、  HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。

6、  Controller执行完成返回ModelAndView。

7、  HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。

8、  DispatcherServlet将ModelAndView传给ViewReslover视图解析器。

9、  ViewReslover解析后返回具体View。

10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。

11、 DispatcherServlet响应用户。

可见,springMVC有以下组件:

DispatcherServlet:作为前端控制器,整个流程控制的中心,控制其它组件执行,统一调度,降低组件之间的耦合性,提高每个组件的扩展性。

HandlerMapping:通过扩展处理器映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。

HandlAdapter:通过扩展处理器适配器,支持更多类型的处理器。

ViewResolver:通过扩展视图解析器,支持更多类型的视图解析,例如:jsp、freemarker、pdf、excel等。

再来看springMVC.xml的配置内容就会更加清晰了;

1.扫描controller中的注解,Controller即是处理器handler

<context:component-scan base-package="zzj.lxy.controller"/>

2.处理器映射器及处理器适配器,前者帮助我们处理@RequestMapping注解的。并将controller类的名字映射为请求url。后者帮助我们处理请求,

告知Spring容器,我们启用注解驱动,支持@RequestMapping注解,解决了@Controller注解的使用前提配置

<mvc:annotation-driven/>

3.配置jsp 显示ViewResolver 视图解析器

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>

4.静态资源默认servlet配置 ,

因为在web.xml中将前端控制器的映射请求设置为"/",拦截所有请求,静态资源也会被拦截,通过该标签放开对静态资源的拦截,但需要我们把静态资源放在webapp下,而非WEB-INF下,否则还是会无效

<mvc:default-servlet-handler/>

我们都知道,Spring是个容器,而springMVC是spring的子容器,它们属于父子关系;子容器可以访问父容器,而父容器则不能访问子容器。这也是service可以注入到controller中,而controller则不可以注入到service中的原因,当然如果是在同一个容器里,也可以注入。

applicationContext.xml及springMVC.xml详解的更多相关文章

  1. Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)

    Android XML shape 标签使用详解   一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...

  2. XML解析之SAX详解

    XML解析之SAX详解 本文属于作者原创 http://www.cnblogs.com/ldnh/ XML解析的五个步骤 1.打开文档 (void)parserDidStartDocument:(NS ...

  3. XML参考 :XmlReader 详解、实例

    XML参考 :XmlReader 详解.实例-- 详解 转:http://www.cnblogs.com/Dlonghow/archive/2008/07/28/1252191.html XML参考 ...

  4. Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)

    Android XML shape 标签使用详解   一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...

  5. SpringMVC RequestMapping 详解

    SpringMVC RequestMapping 详解 RequestMapping这个注解在SpringMVC扮演着非常重要的角色,可以说是随处可见.它的知识点很简单.今天我们就一起学习Spring ...

  6. 利用Intellij+MAVEN搭建Spring+Mybatis+MySql+SpringMVC项目详解

    http://blog.csdn.net/noaman_wgs/article/details/53893948 利用Intellij+MAVEN搭建Spring+Mybatis+MySql+Spri ...

  7. Spring框架入门之基于xml文件配置bean详解

    关于Spring中基于xml文件配置bean的详细总结(spring 4.1.0) 一.Spring中的依赖注入方式介绍 依赖注入有三种方式 属性注入 构造方法注入 工厂方法注入(很少使用,不推荐,本 ...

  8. PULL解析XML的运行机制详解

    PULL解析简单易上手,基本上看一遍,基本上就会解析啦,但总是感觉对PULL解析的运行机制不是很了解,就总结了以下事件驱动到底是怎么执行的.. PULL: Android内置了PULL解析器.PULL ...

  9. java操作xml方式比较与详解(DOM、SAX、JDOM、DOM4J)

    java中四种操作(DOM.SAX.JDOM.DOM4J)xml方式的比较与详解     1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准. ...

  10. 逆向工程生成的Mapper.xml以及*Example.java详解

    逆向工程生成的接口中的方法详解 在我上一篇的博客中讲解了如何使用Mybayis逆向工程针对单表自动生成mapper.java.mapper.xml.实体类,今天我们先针对mapper.java接口中的 ...

随机推荐

  1. Task :app:lintVitalRelease FAILED

    错误信息:Task :app:lintVitalRelease FAILED 问题原因:dl.google.com 无法连接 解决办法: 修改hosts(推荐)通过在线查询ip网站,找到dl.goog ...

  2. XenForo论坛安装

    1.下载安装程序,程序可以到qq群里面找,或者是联系我 2.域名+/install安装 3.汉化后台,访问https://www.cnxfans.com/resources/xenforo-2-x.1 ...

  3. Camstar报错:cannot be accessed through null object reference at CDO 'xxx'

  4. Windows10+VS2019从源码编译 Qt5

    参考 Windows10+MSVC(VS2022)从源码编译QT5.12.11 - 知乎 (zhihu.com) qt-labs/vstools ~ qt-labs/vstools (github.c ...

  5. php json_encode 斜杠 反斜杠 转义处理

    $data = str_replace("\\\\n", "\\n", \jsonEncode($data)); // \\n转为\n $data = str_ ...

  6. 关于matlab2011b 32bit无法成功激活

    matlab2011b版本已经很少见了 下载链接:Matlab_R2011B.Win32.iso_免费高速下载|百度网盘-分享无限制 (baidu.com) 解决办法:(参考原博) (43条消息) M ...

  7. Java中如何判断两个对象是否相等

    参考:https://blog.csdn.net/u013063153/article/details/78808923 下面是自己开发过程中的实现 package com.***.***.entit ...

  8. thirty

    数组中的方法 filter filter方法可以过滤符合条件的数值,返回一个新数组,可以利用filter和indexOf进行数组去重操作(indexOf返回的是该数组内的值第一次出现的索引,若无该值返 ...

  9. MySQL表操作(下篇)--完整性约束

    一.介绍 约束条件与数据类型的宽度一样,都是可选参数 作用:用于保证数据的完整性和一致性主要分为: PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录FOREIGN KEY ...

  10. mac Big Sur 打开应用提示,您没有权限来打开应用程序

    终端输入codesign --force --deep --sign - /Applications/{AppName.app}注意{AppName.app} 替换为无法打开的应用程序名,将尝试强制签 ...