您现在的位置是:首页 >学无止境 >Spring的第十七阶段:xml配置式事务声明、Spring与web结合网站首页学无止境
Spring的第十七阶段:xml配置式事务声明、Spring与web结合
简介Spring的第十七阶段:xml配置式事务声明、Spring与web结合
1、xml配置式事务声明
去掉所有@Transactional的注解。
<?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:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- 配置加载 jdbc.properties 属性配置文件 -->
<context:property-placeholder location="classpath:jdbc.properties" />
<!-- 配置包扫描 -->
<context:component-scan base-package="com"/>
<!--
需要配置数据库连接池
-->
<bean class="com.alibaba.druid.pool.DruidDataSource" id="dataSource">
<property name="username" value="${user}" />
<property name="password" value="${password}" />
<property name="url" value="${url}" />
<property name="driverClassName" value="${driverClassName}" />
<property name="initialSize" value="${initialSize}" />
<property name="maxActive" value="${maxActive}" />
</bean>
<bean class="org.springframework.jdbc.core.JdbcTemplate" id="jdbcTemplate">
<property name="dataSource" ref="dataSource" />
</bean>
<!--
切面类
-->
<bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
id="transactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!--
事务属性
-->
<tx:advice id="tx_advice" transaction-manager="transactionManager">
<tx:attributes>
<!--
tx:method 标签配置哪些方法使用哪个事务属性
name="" 配置方法名
propagation="" 事务传播特性
精确
-->
<tx:method name="multiTransaction" propagation="REQUIRED" />
<tx:method name="multiUpdate" propagation="REQUIRED" />
<!--
name="save*" 以save打头的所有方法
propagation 配置传播特性
半模糊
-->
<tx:method name="save*" propagation="REQUIRED" />
<!--
name="delete*" 以 delete 打头的所有方法
propagation 配置传播特性
-->
<tx:method name="delete*" propagation="REQUIRED" />
<!--
name="update*" 以 update 打头的所有方法
propagation 配置传播特性
-->
<tx:method name="update*" propagation="REQUIRED" />
<!--
name="*" 表示前面匹配完之后,剩下的所有方法
方法在匹配事务属性的时候,匹配的先后顺序是:
精确匹配 ==>>> 半模糊匹配 ==>>> 全模糊匹配
read-only="true" 表示只读
-->
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice>
<!--
事务管理: 代理aop
-->
<aop:config>
<!-- 配置切入点表达式 -->
<aop:advisor advice-ref="tx_advice"
pointcut="execution( public * com.atguigu..*Service*.*(..) )"
/>
</aop:config>
</beans>
2、Spring整合Web( 在web工程中使用Spring )
2.1、在web工程中添加Spring的jar包
Spring的核心包
spring-beans-4.0.0.RELEASE.jar
spring-context-4.0.0.RELEASE.jar
spring-core-4.0.0.RELEASE.jar
spring-expression-4.0.0.RELEASE.jar
aop包
spring-aop-4.0.0.RELEASE.jar
spring-aspects-4.0.0.RELEASE.jar
com.springsource.org.aopalliance-1.0.0.jar
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
JDBC-ORM包
spring-jdbc-4.0.0.RELEASE.jar
spring-orm-4.0.0.RELEASE.jar
spring-tx-4.0.0.RELEASE.jar
Spring的web整合包
spring-web-4.0.0.RELEASE.jar
测试包
spring-test-4.0.0.RELEASE.jar
官方推荐我们把Spring容器对象创建的功能交给Spring来完成.不需要我们自己编写.
因为Spring容器一般只有一个,用户自己编写很容易造成由于Spring容器管理不当导致内存泄露.
整合Spring和Web容器分两个步骤:
1、导入spring-web-4.0.0.RELEASE.jar ( 包含创建Spring容器对象,以及Spring容器对象的销毁操作 )。
2、在web.xml配置文件中配置org.springframework.web.context.ContextLoaderListener监听器监听ServletContext的初始化 ( 用于创建Spring容器 , 和销毁Spring容器 )。
3、在web.xml配置文件中配置contextConfigLocation上下文参数。配置Spring配置文件的位置,以用于初始化Spring容器。
2.2、在web.xml中配置
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
2.3、获取WebApplicationContext上下文对象的方法如下:
方法一(推荐):
WebApplicationContextUtils.getWebApplicationContext(getServletContext())
方法二(不推荐):
getServletContext().getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
Spring 整合web 其实就一个关键
就是在web工程中创建Spring容器对象
然后得到这个Spring容器对象获取容器中的组件就可以使用了。
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。