zoukankan      html  css  js  c++  java
  • applicationContext.xml及springMVC.xml详解

      在前面的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中的原因,当然如果是在同一个容器里,也可以注入。

  • 相关阅读:
    Extjs知识点汇总
    div设置滚动条内容任然显示不全
    win7 系统安装 docker
    docker常用命令
    cargo实现自动化部署远程jetty容器(非安全模式)
    win7 失去焦点解决方案
    jeecms 评论相关
    jeecms v8 网站访问量配置
    python——进程池
    python多进程编程常用到的方法
  • 原文地址:https://www.cnblogs.com/zzjlxy-225223/p/12611093.html
Copyright © 2011-2022 走看看