- 浏览: 1247392 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (193)
- ant/maven (6)
- algorithm (5)
- tomcat/weblogic/jboss (6)
- javascript/jquery (13)
- java (33)
- flex/flash (0)
- JPA/Hibernate/myBatis (18)
- java concurrent (7)
- test (2)
- windows/linux (6)
- java collection (7)
- design pattern (2)
- life/health (3)
- database (12)
- IDE (4)
- spring/ejb (20)
- html/css/ckeditor (7)
- jsp/servlet (3)
- java io (13)
- java security (4)
- jni (0)
- svn/git (2)
- english (2)
- java jmx (1)
- xml (1)
- struts/springmvc (9)
- middleware (2)
- cache (1)
- cglib (3)
最新评论
-
jlotusYo:
博主,真感谢。
Java 密码扩展无限制权限策略文件 -
senninha:
这个。。是api说明吧。。
ScheduledExecutorService 源码分析 -
zoutao2008:
请问大文件如何处理?按你这种方式的话,文件超过200M时就会报 ...
hessian系列之二:上传文件 -
lwj1113:
lwj1113 写道谢谢博主这么细致的demo;在系列五中通过 ...
myBatis系列之五:与Spring3集成 -
lwj1113:
谢谢博主这么细致的demo;在系列五中通过testng测试类跑 ...
myBatis系列之五:与Spring3集成
Spring AOP通过在文件中配置来管理事务,好处是对代码侵入性小。
Spring AOP使用AspectJ表达式来定义切点,所以pom文件加入:
FruitShop实现:
方法中除了使用继承自JdbcDaoSupport的JdbcTemplate来操作数据库外,没有其它与事务有关的代码:
beans-fruitshop-aop.xml文件:
测试类:
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); } }
发表评论
-
本地事务系列之五:使用Transactional注解
2014-08-02 18:16 2831AOP的配置稍显复杂,通过@Transactional注解,同 ... -
本地事务系列之三:使用TransactionTemplate
2014-07-17 22:15 6773TransactionTemplate的灵活性好,可以给代码块 ... -
本地事务系列之二:使用PlatformTransactionManager
2014-07-17 21:37 5396Spring的事务管理器接口: public interf ... -
本地事务系列之一:JDBC操作
2014-07-08 23:04 1233本地事务即对一个数据源进行操作。大多数数据库支持事务。 先看 ... -
Spring AOP 源码系列:ProxyFactoryBean
2014-04-21 18:01 0public class ProxyFactoryBean ... -
Spring AOP 源码系列
2014-04-21 09:22 0Spring AOP通过JDK的正则表达式对Pointcut表 ... -
Spring AOP系列之五:后置通知
2014-04-14 08:59 1675和前置通知类似, 通过实现org.springframewor ... -
Spring AOP系列之四:前置通知
2014-04-13 21:28 1830通过实现org.springframework.aop.M ... -
Spring AOP系列之三:环绕代理
2014-04-13 18:20 1422通过实现org.aopalliance.intercept.M ... -
Spring AOP系列之二:Java代理
2014-04-13 18:00 1051通过Java代理的方式: 汽车的代理,需要实现java.la ... -
Spring AOP系列之一:手动方式
2014-04-13 17:44 1390AOP (Aspect Oriented Progra ... -
HibernateTemplate 使用
2014-03-03 22:09 01. queryListBySql hibernateTe ... -
Spring的组件扫描
2017-09-16 21:58 1066Spring2.0以后的版本中,引入了基于注解(Annotat ... -
ContextLoaderListener和ContextCleanupListener源码分析
2013-12-18 15:55 0public class ContextLoaderLis ... -
Cglib2AopProxy 源码分析
2013-12-05 14:30 0final class Cglib2AopProxy im ... -
Spring生命周期方法的调用顺序
2013-11-19 22:04 0Spring的几个接口: BeanFactoryAware: ... -
一、Spring AOP的简单实例
2013-11-06 23:31 17761. 往pom.xml文件添加以下依赖: <depe ... -
Spring配置中的bean引用其它bean的属性值
2013-01-23 15:24 4228这项功能在spring的3.0版本以上才支持,如果使用较早的版 ... -
spring JPA struts 整合开发(2) - spring集成struts
2012-05-20 20:55 1433一. spring JPA struts 整合开发(1) - ... -
spring JPA struts 整合开发(1) - spring集成JPA
2012-05-20 20:26 1705一. spring JPA struts 整合开发(1) - ...
相关推荐
面试题精选部分可能涵盖了Spring AOP的常见问题,如如何配置和使用AOP,事务管理的原理等,这些都是开发者在面试中可能会遇到的问题。 总结起来,Spring AOP在Spring Framework中的应用广泛且深入,不仅在事件处理...
然而,在许多实际应用场景中,应用往往只需要处理单一的数据源(通常是数据库),这时使用本地事务(例如JDBC提供的事务管理功能)就足够了。 #### 二、事务管理的重要性 事务处理的核心在于确保一系列数据库操作...
在事务管理方面,Spring支持编程式和声明式事务,可以处理单个数据库的本地事务,以及跨多个数据源的分布式事务。 `Druid` 是阿里巴巴开源的一个高性能、可扩展的数据源连接池。它除了提供基础的连接池功能外,还...
8. **补偿事务(Saga)**:在微服务架构中,由于单个事务可能涉及多个服务,因此出现了Saga模式,它通过一系列小的本地事务来实现长事务,每个小事务称为一个补偿操作,如果前面的操作失败,后续的补偿操作将回滚...
- **事务管理**:Spring的事务管理支持本地事务和分布式事务,可以通过声明式事务管理和编程式事务管理两种方式进行配置。 - **远程调用**:Spring支持多种远程调用协议,如RMI、HTTP invoker等,便于实现服务间的...
Spring通过以下方式支持AOP: - **AspectJ注解**:使用`@Aspect`、`@Before`、`@After`、`@Around`等注解定义切面和通知。 - **XML配置**:通过XML配置文件定义切面和通知。 - **编程方式**:通过手动编码的方式...
LCN(Local Connection Network)是一个分布式事务管理框架,它通过代理数据库连接,实现了本地化的事务管理,从而减少了网络通信开销,提高了事务处理速度。在SpringCloud环境中,LCN可以轻松集成到SpringBoot应用...
12. ** 高级主题**:涵盖AOP(面向切面编程)在Struts中的应用,如Spring与Struts的集成,以及Struts与其他框架(如Hibernate、iBATIS)的联合使用。 13. ** 实战项目**:提供实际案例,演示如何从头开始构建一个...
AOP允许程序员定义“切面”,这些切面封装了关注点,如日志、事务管理等。在运行时,AOP框架可以自动将这些切面织入到应用程序的适当位置,从而减少代码冗余,提高代码的可维护性。 这个"JAVA知识图谱"是学习和深化...
本手册将对 JFinal 框架进行详细介绍,包括快速上手指南、JFinalConfig 配置、Controller 控制器使用、面向切面编程(AOP)、ActiveRecord 模式、模板引擎的使用、缓存插件、Redis 插件、Cron 作业插件、验证器、...
7. **Spring AOP事务管理**:Spring的AOP模块可以方便地实现事务管理,无论是在本地事务还是分布式事务环境下。声明式事务管理允许开发者在配置中指定事务边界,无需在业务逻辑代码中显式处理。 8. **Spring Web...
- **事务管理**:提供了一致的事务管理接口,支持本地事务和全局事务(JTA)。 - **异常处理**:Spring 将底层技术抛出的异常转换为统一的非检查异常,简化错误处理。 3. **Spring 模块** - **核心模块**:包含 ...
4. **事务管理**:框架集成了事务管理功能,支持编程式和声明式事务控制,确保了业务操作的原子性和一致性。 5. **缓存机制**:为了提升应用性能,Paoding Rose提供了缓存机制,能够缓存常用的数据,减少数据库访问...
- **事务管理**:Spring框架提供了统一的事务管理API,支持本地事务和分布式事务,使得事务的处理更加简单。 - **Spring MVC**:Spring MVC是Spring框架的一部分,用于构建Web应用程序。它遵循Model-View-...
Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,...随着现代开发方式的发展,许多项目现在使用构建工具自动管理依赖并将其存储在本地或远程仓库,但了解这些 jar 包的作用仍然是理解 Spring MVC 工作原理的关键。
根据给定文件的信息,我们可以提炼出一系列针对2024年阿里、京东、蚂蚁等大厂面试的关键知识点。这些知识点涵盖了Java基础知识、JVM、并发编程、框架使用等多个方面,对于准备进入这些顶级企业的求职者来说,是非常...
Spring 3.2.5.RELEASE是该框架的一个特定版本,它包含了从3.2系列中改进和修复的问题,为开发者提供了更稳定和功能丰富的环境。 Spring 框架的核心特性包括依赖注入(Dependency Injection,DI)和面向切面编程...
4. **事务管理**:Spring提供了一种统一的事务管理API,可以用于编程式或声明式事务控制,无论是本地事务还是全局事务(如JTA)。 5. **Web MVC框架**:Spring MVC是Spring框架的一部分,它提供了一个灵活的Web应用...
然而,如果在过程中出现异常,比如tc2的操作失败,tm会接收到异常信息,然后通知所有参与者回滚本地事务,实现事务的回滚,保证数据的一致性。 SpringBoot 1.5和SpringCloud的结合为微服务提供了强大的开发和部署...