在前面的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. spring@Validated校验用法

    1.controller添加注解 public BaseResponse addOrUpdateUnit(@RequestBody @Validated RiskUnitDto riskUnitDto ...

  2. LightOJ - 1162 Min Max Roads

    LightOJ - 1162 Min Max Roads 题解:在线倍增LCA和模拟ST表 让我们求从\(u->v\)最短路径上的边权最大值和边权最小值,那么我们可以利用倍增思想,类似其\(fa ...

  3. perf 编译失败

    linux-6.0-rc2 : linux-6.0-rc2/tools/include/asm/../../arch/x86/include/asm/rmwcc.h:7:9: error: impli ...

  4. csp-s2020 T2 动物园

    题目简述: 共有n个动物,m条要求,每条要求描述了第x位上是1的话,必须购买y饲料,动物园里已有的动物必须的饲料已经购买了,问题是:在不要求增加购买饲料的基础上,还能放进去多少种动物?共有k个二进制, ...

  5. @Component类相互引用的加载顺序

    发现bug:没有消息通知,看日志发现调用消息通知的url前缀为null,定位到此工具类 进入工具类 进入ComponentConstant类:它引用了两个配置类 问题:component标注的类相互引 ...

  6. uniapp 样式记录

    flex https://uniapp.dcloud.io/nvue-css display: flex;/* 容器布局 */ flex:1; overflow: scroll;/* 容器内滚动条 * ...

  7. Windows系统运行selenium

    1.系统已安装python: 2.安装pip 官网下载pip安装包:https://pypi.org/project/pip/#files 解压后   python setup.py install ...

  8. 滚动 Scroller OverScroller

    原文:https://www.baidu.com/link?url=26iKhqGV7w87fqTiCTCwQc3VPcCbedUpAlddWm3uHsEXAGaeH47xY8QCZNGcORGBAU ...

  9. vue调接口导出表格

     props:{       form:{         type:Object,         default:()=>{}       },       indexNum:{       ...

  10. linux系统过滤ip地址总结

    Perl模块用法 安装Perl模块 # 官网地址 https://metacpan.org/pod/Regexp::Common # 下载地址 https://cpan.metacpan.org/au ...