zoukankan      html  css  js  c++  java
  • 第九篇:Spring的applicationContext.xml配置总结

    在前面的一篇日志中,记录了web.xml配置启动的顺序,web启动到监听器ContextLoaderListener时,开始加载spring的配置文件applicationContext.xml(通常就叫这个名字),在查询大量资料之后决心将该文件详细的配置说明和讲解记录下来,以供查阅,加深原理的理解。
            首先是spring的各类命名空间和xml声明:

    <?xml version="1.0" encoding="UTF-8"?>
    <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:aop="http://www.springframework.org/schema/aop"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:task="http://www.springframework.org/schema/task"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-4.1.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
    http://www.springframework.org/schema/task
    http://www.springframework.org/schema/task/spring-task-4.1.xsd">
    </beans>
            这一部分, 可以自行查阅资料,不去深究也罢。
            以下配置,均在<beans></beans>标签之类,为了便于讲解,直接写出来,一般的在这个配置文件中主要做两件事,扫描注解和注册数据源(数据库信息相关)

    第一,扫描注解,看下面两个标签
    1、<context:component-scan base-package="cn.byan" use-default-filters="false"/>
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
      </context:component-scan>
    2、<context:annotation-config />
    第1种标签:
    base-package填入你要扫描的包
    use-default-filters这个 属性表示你要扫描注解的类,
    true,默认会扫描注解了这四个标志的类:Service,Component,Repository,Controller;
    false,如果你设为false,那么就需要增加 <context:exclude-filter/>这个子节点,指出哪种注解不让spring去默认扫描
    当设为false时,需要掌握子节点的这几个属性:
    <context:exclude-filter/>:该子节点指定要排除扫描的类,比如一般的@controller的注解类可能会放到mvc的配置文件中去指定扫描
    <context:include-filter/>:相反,该子节点指定要扫描的类,什么时候用,还没遇到过
    type :通常都是annotation(注解的意思)
    expression :注解类的全名(每种注解类在spring中都有全名)
    第2种标签:
    <context:annotation-config />,也是spring用的比较多的默认扫描的配置,功能和1差不多,但是第一种配置包含第2种配置,所以直选其一即可。1用的比较多

    以上标签,通俗点讲,就是:web启动时,默认扫描cn.byan包中注解了@service,@Component,@Repository标注的类,交给spring容器去管理(不扫描@Controller标注的类)。

    第二,配置数据源
    <!-- 用spring提供的PropertyPlaceholderConfigurer读取数据库配置信息-->
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
      <property name="locations">
         <list>
        <value>classpath:conf/jdbc.properties</value>
      </list>   </property> </bean>
    数据库的配置信息,一般写成配置文件jdbc.properties,放在项目中,在项目启动时加载读取

    <!-- dataSource读取数据库的配置信息 ,这里用的是dbcp-->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" init-method="init" destroy-method="close">
      <property name="driverClassName" value="${jdbc_driverClassName}"></property>
      <property name="url" value="${jdbc_url}"></property>
      <property name="username" value="${jdbc_username}"></property>
      <property name="password" value="${jdbc_password}"></property>
      <!-- 连接池最大使用连接数 -->
      <property name="maxActive" value="${jdbc_maxActive}"></property>
      <!-- 初始化连接大小 -->
      <property name="initialSize" value="${jdbc_initialSize}"></property>
      <!-- 获取连接最大等待时间 -->
      <property name="maxWait" value="${jdbc_maxWait}"></property>
      <!-- 连接池最大空闲 -->
      <property name="maxIdle" value="${jdbc_maxIdle}"></property>
      <!-- 连接池最小空闲 -->
      <property name="minIdle" value="${jdbc_minIdle}"></property>
      <!-- 自动清除无用连接 -->
      <property name="removeAbandoned" value="${jdbc_removeAbandoned}"></property>
      <!-- 清除无用连接的等待时间 -->
      <property name="removeAbandonedTimeout" value="${jdbc_removeAbandonedTimeout}"></property>
      <!-- 事物是否自动提交-->
      <property name="defaultAutoCommit" value="${jdbc_defaultAutoCommit}"></property>
      <!-- 连接属性 -->
      <property name="connectionProperties" value="clientEncoding=UTF-8"></property>
    </bean> 
    
    <!-- 配置SessionFactory,这里用的是hibernate4,mybatis目前还不太熟 -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
      <property name="dataSource" ref="dataSource" />
      <property name="packagesToScan" value="com.byan.entity" />
      <property name="hibernateProperties">
      <props>
        <prop key="hibernate.dialect">${hibernate.dialect}</prop>
        <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
        <prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
      </props>
      </property>
    </bean> 
    
    <!-- 定义事务管理器,用了spring管理的hibernate4的事物,再也不用担心事物。。。-->
    <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
      <property name="sessionFactory" ref="sessionFactory" />
    </bean> 
    
    <!-- 声明事务管理器,此时在ServiceImpl或者DaoImpl类上需加上@Transactional注解-->
    <tx:annotation-driven transaction-manager="transactionManager" />
    以上是applicationContext.xml配置文件要掌握的最基础的配置使用信息
  • 相关阅读:
    faster with MyISAM tables than with InnoDB or NDB tables
    w-BIG TABLE 1-toSMALLtable @-toMEMORY
    Indexing and Hashing
    MEMORY Storage Engine MEMORY Tables TEMPORARY TABLE max_heap_table_size
    controlling the variance of request response times and not just worrying about maximizing queries per second
    Variance
    Population Mean
    12.162s 1805.867s
    situations where MyISAM will be faster than InnoDB
    1920.154s 0.309s 30817
  • 原文地址:https://www.cnblogs.com/yb38156/p/9821911.html
Copyright © 2011-2022 走看看