`

本地事务系列之四:使用AOP

阅读更多
Spring AOP通过在文件中配置来管理事务,好处是对代码侵入性小。

Spring AOP使用AspectJ表达式来定义切点,所以pom文件加入:
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.7.0</version>
</dependency>


FruitShop实现:

方法中除了使用继承自JdbcDaoSupport的JdbcTemplate来操作数据库外,没有其它与事务有关的代码:

public class AopTxFruitShop extends JdbcDaoSupport implements FruitShop {

	@Override
	public boolean purchase(int fruitId, String userName, int count) {
		String querySql = "SELECT PRICE FROM FRUIT WHERE ID = ?";
		String upStockSql = "UPDATE FRUIT_STOCK SET STOCK = STOCK - ? WHERE ID = ?";
		String upAccountSql = "UPDATE ACCOUNT SET BALANCE = BALANCE - ? WHERE USERNAME = ?";

		int price = getJdbcTemplate().queryForInt(querySql, new Object[] { fruitId });
		getJdbcTemplate().update(upStockSql, new Object[] { count, fruitId });
		getJdbcTemplate().update(upAccountSql, new Object[] { price * count, userName });
		return true;
	}
}


beans-fruitshop-aop.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: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/tx http://www.springframework.org/schema/tx/spring-tx.xsd
 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">

  <!-- 当transaction-manager属性不指定时,Spring会搜索名称为transactionManager的bean -->
  <tx:advice id="fruitShopTxAdvice" transaction-manager="txManager">
  	<tx:attributes><!-- 可以指定多个需要事务的方法 -->
  		<tx:method name="purchase" /><!-- 支持通配符* -->
	</tx:attributes>
  </tx:advice>
  
  <aop:config>
  	<aop:pointcut id="fruitShopOperation" expression="execution(* com.john.tx.service.impl.AopTxFruitShop.*(..))" /><!-- 切点表达式 -->
	<aop:advisor advice-ref="fruitShopTxAdvice" pointcut-ref="fruitShopOperation" />
  </aop:config>

  <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  	<property name="driverClassName" value="com.mysql.jdbc.Driver" />
	<property name="url" value="jdbc:mysql://localhost:3306/spring?characterEncoding=utf8" />
	<property name="username" value="spring" />
	<property name="password" value="123456" />
  </bean>
  
  <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  	<property name="dataSource" ref="dataSource" />
  </bean>
  
  <bean id="aopTxFruitShop" class="com.john.tx.service.impl.AopTxFruitShop">
  	<property name="dataSource" ref="dataSource" />
  </bean>
</beans>


测试类:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:/beans-fruitshop-aop.xml" })
public class AopTxFruitShopTest {

	@Resource(name = "aopTxFruitShop")
	FruitShop aopTxFruitShop;
	
	@Test
	public void test() {
		int fruitId = 1;
		String userName = "user1";
		int count = 3;
		aopTxFruitShop.purchase(fruitId, userName, count);
	}
}
分享到:
评论

相关推荐

    第五章:Spring AOP 在 Spring Framework 内部应用1

    面试题精选部分可能涵盖了Spring AOP的常见问题,如如何配置和使用AOP,事务管理的原理等,这些都是开发者在面试中可能会遇到的问题。 总结起来,Spring AOP在Spring Framework中的应用广泛且深入,不仅在事件处理...

    JAVA设计模式之事务处理.pdf

    然而,在许多实际应用场景中,应用往往只需要处理单一的数据源(通常是数据库),这时使用本地事务(例如JDBC提供的事务管理功能)就足够了。 #### 二、事务管理的重要性 事务处理的核心在于确保一系列数据库操作...

    spring 结合druid和hibernate使用jta配置分布式事务

    在事务管理方面,Spring支持编程式和声明式事务,可以处理单个数据库的本地事务,以及跨多个数据源的分布式事务。 `Druid` 是阿里巴巴开源的一个高性能、可扩展的数据源连接池。它除了提供基础的连接池功能外,还...

    事物管理javaweb.zip

    8. **补偿事务(Saga)**:在微服务架构中,由于单个事务可能涉及多个服务,因此出现了Saga模式,它通过一系列小的本地事务来实现长事务,每个小事务称为一个补偿操作,如果前面的操作失败,后续的补偿操作将回滚...

    Spring in action

    - **事务管理**:Spring的事务管理支持本地事务和分布式事务,可以通过声明式事务管理和编程式事务管理两种方式进行配置。 - **远程调用**:Spring支持多种远程调用协议,如RMI、HTTP invoker等,便于实现服务间的...

    javaSpring-经典概念题-试题-中文

    Spring通过以下方式支持AOP: - **AspectJ注解**:使用`@Aspect`、`@Before`、`@After`、`@Around`等注解定义切面和通知。 - **XML配置**:通过XML配置文件定义切面和通知。 - **编程方式**:通过手动编码的方式...

    lcn-demo.rar

    LCN(Local Connection Network)是一个分布式事务管理框架,它通过代理数据库连接,实现了本地化的事务管理,从而减少了网络通信开销,提高了事务处理速度。在SpringCloud环境中,LCN可以轻松集成到SpringBoot应用...

    Spring.pdf

    - **事务管理**:Spring提供了灵活的事务管理机制,支持本地事务和分布式事务。 - **集成测试**:Spring支持集成测试,可以方便地测试应用程序的不同部分。 综上所述,Spring框架通过一系列核心概念和技术,为Java...

    Struts:The Complete Reference

    12. ** 高级主题**:涵盖AOP(面向切面编程)在Struts中的应用,如Spring与Struts的集成,以及Struts与其他框架(如Hibernate、iBATIS)的联合使用。 13. ** 实战项目**:提供实际案例,演示如何从头开始构建一个...

    JAVA知识图谱:JVM、JMM、JUC、NIO、Netty、IOC、AOP、Jav-JavaKnowledge.zip

    AOP允许程序员定义“切面”,这些切面封装了关注点,如日志、事务管理等。在运行时,AOP框架可以自动将这些切面织入到应用程序的适当位置,从而减少代码冗余,提高代码的可维护性。 这个"JAVA知识图谱"是学习和深化...

    jfinal开发手册

    本手册将对 JFinal 框架进行详细介绍,包括快速上手指南、JFinalConfig 配置、Controller 控制器使用、面向切面编程(AOP)、ActiveRecord 模式、模板引擎的使用、缓存插件、Redis 插件、Cron 作业插件、验证器、...

    spring framework2.1.6开发手册,API文档

    7. **Spring AOP事务管理**:Spring的AOP模块可以方便地实现事务管理,无论是在本地事务还是分布式事务环境下。声明式事务管理允许开发者在配置中指定事务边界,无需在业务逻辑代码中显式处理。 8. **Spring Web...

    Spring面试题(含答案)_[更多最新精品www.cx1314.cn]1

    - **事务管理**:提供了一致的事务管理接口,支持本地事务和全局事务(JTA)。 - **异常处理**:Spring 将底层技术抛出的异常转换为统一的非检查异常,简化错误处理。 3. **Spring 模块** - **核心模块**:包含 ...

    paoding-rose备份

    4. **事务管理**:框架集成了事务管理功能,支持编程式和声明式事务控制,确保了业务操作的原子性和一致性。 5. **缓存机制**:为了提升应用性能,Paoding Rose提供了缓存机制,能够缓存常用的数据,减少数据库访问...

    Spring笔记.pdf

    - **事务管理**:Spring框架提供了统一的事务管理API,支持本地事务和分布式事务,使得事务的处理更加简单。 - **Spring MVC**:Spring MVC是Spring框架的一部分,用于构建Web应用程序。它遵循Model-View-...

    springmvc相关jar包

    Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,...随着现代开发方式的发展,许多项目现在使用构建工具自动管理依赖并将其存储在本地或远程仓库,但了解这些 jar 包的作用仍然是理解 Spring MVC 工作原理的关键。

    2024最新阿里、京东、蚂蚁等大厂面试题

    根据给定文件的信息,我们可以提炼出一系列针对2024年阿里、京东、蚂蚁等大厂面试的关键知识点。这些知识点涵盖了Java基础知识、JVM、并发编程、框架使用等多个方面,对于准备进入这些顶级企业的求职者来说,是非常...

    spring-framework-3.2.5.RELEASE

    Spring 3.2.5.RELEASE是该框架的一个特定版本,它包含了从3.2系列中改进和修复的问题,为开发者提供了更稳定和功能丰富的环境。 Spring 框架的核心特性包括依赖注入(Dependency Injection,DI)和面向切面编程...

    spring2.5.5

    4. **事务管理**:Spring提供了一种统一的事务管理API,可以用于编程式或声明式事务控制,无论是本地事务还是全局事务(如JTA)。 5. **Web MVC框架**:Spring MVC是Spring框架的一部分,它提供了一个灵活的Web应用...

Global site tag (gtag.js) - Google Analytics