ssm框架中,web專案中applicationContext.xml及相關配置檔案解析
阿新 • • 發佈:2019-01-01
一、概述
applicationContext.xml,即Spring上下文配置檔案,用於完成Spring和MyBatis的整合。主要配置bean自動掃描、依賴注入、資料庫、事務等。如下
<?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: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-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"> <context:component-scan base-package="com.atguigu"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan> <!--spring的配置檔案,這裡主要配置與事務邏輯有關的 --> <!--資料來源,整合mybatis,事務控制,、、、、、 --> <context:property-placeholder location="classpath:dbconfig.properties" /> <bean id="pooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property> <property name="driverClass" value="${jdbc.driverClass}"></property> <property name="user" value="${jdbc.user}"></property> <property name="password" value="${jdbc.password}"></property> </bean> <!--配置和mybatis的整合 --> <!--配置會話工廠 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="configLocation" value="classpath:mybatis-config.xml" /> <property name="dataSource" ref="pooledDataSource" /> <property name="mapperLocations" value="classpath:mapper/*.xml" /> </bean> <!--配置掃描器,將mybatis介面的實現加入到IOC容器 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.atguigu.crud.dao" /> </bean> <!--配置一個可批量處理的sqlSession --> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg> <constructor-arg name="executorType" value="BATCH"></constructor-arg> </bean> <!--事務控制的配置 --> <!--事務管理器 --> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!--控制住資料來源 --> <property name="dataSource" ref="pooledDataSource" /> </bean> <!--開啟基於註解的事務,使用xml配置形式的配置(比較重要的都是使用配置式) --> <aop:config> <!--切入點表示式 --> <aop:pointcut expression="execution(* com.atguigu.crud.service..*(..))" id="txPoint"/> <!--配置事務增強,切入點+切入規則 --> <aop:advisor advice-ref="txAdvice" pointcut-ref="txPoint" /> </aop:config> <!--配置事務增強,事務切入的規則 --> <tx:advice id="txAdvice" transaction-manager="txManager"> <tx:attributes> <!--以find開頭的所有方法都是事務方法 --> <tx:method name="find*" read-only="true" /> <tx:method name="to*" read-only="true" /> <tx:method name="add*" propagation="REQUIRED" rollback-for="java.lang.Exception" /> <tx:method name="update*" propagation="REQUIRED" rollback-for="java.lang.Exception" /> <tx:method name="delete*" propagation="REQUIRED" rollback-for="java.lang.Exception" /> </tx:attributes> </tx:advice> </beans>
二、各部分解析
1.配置掃描器,將除Controller層以外的類裝配到Spring容器
<context:component-scan base-package="com.atguigu"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan>
2.配置資料來源
方法(1)
<context:property-placeholder location="classpath:dbconfig.properties" /> <bean id="pooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property> <property name="driverClass" value="${jdbc.driverClass}"></property> <property name="user" value="${jdbc.user}"></property> <property name="password" value="${jdbc.password}"></property> </bean>
applicationContext.xml檔案同級目錄(類路徑)下建立dbconfig.properties檔案
jdbc.jdbcUrl=jdbc:mysql://localhost:3306/ssm_crud jdbc.driverClass=com.mysql.jdbc.Driver jdbc.user=****** jdbc.password=*******
方法(2)
<util:properties id="jdbc" location="classpath:jdbc.properties"/> <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close"> <property name="url" value="#{jdbc.url}"/> <property name="driverClassName" value="#{jdbc.driver}"/> <property name="username" value="#{jdbc.user}"/> <property name="password" value="#{jdbc.password}"/> </bean>
applicationContext.xml檔案同級目錄(類路徑)下建立jdbc.properties檔案
url=jdbc:mysql://localhost:3306/cscbms?characterEncoding=utf-8&allowMultiQueries=true driver=com.mysql.jdbc.Driver user=****** password=******
3.整合MyBatis
<!--配置和mybatis的整合 --> <!--配置會話工廠 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="configLocation" value="classpath:mybatis-config.xml" /> <property name="dataSource" ref="pooledDataSource" /> <property name="mapperLocations" value="classpath:mapper/*.xml" /> </bean> <!--配置掃描器,將mybatis介面的實現加入到IOC容器 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.atguigu.crud.dao" /> </bean> <!--配置一個可批量處理的sqlSession --> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg> <constructor-arg name="executorType" value="BATCH"></constructor-arg> </bean>
配置sqlSessionFactory時需要引用mybatis-config.xml(用於配置mybatis相關引數),mybatis-config.xml編寫方法見http://www.mybatis.org/mybatis-3/zh/getting-started.html(mybatis中文參考文件)。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <settings> <setting name="mapUnderscoreToCamelCase" value="true "></setting> </settings> <typeAliases> <package name="com.atguigu.crud.bean" /> </typeAliases> <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <!--分頁引數合理化 --> <property name="reasonable" value="true"/> </plugin> </plugins> </configuration>