- 浏览: 32818 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (42)
- java (14)
- struts2 (2)
- oracle (2)
- 正则表达式 (1)
- linux (3)
- groovy (1)
- tomcat (2)
- spring (3)
- struts1 (0)
- JVM (1)
- eclipse (1)
- netbeans (0)
- 安全 (0)
- jsp/servlet (1)
- 学习心得 (1)
- 项目管理 (1)
- 流媒体 (1)
- 职业规划 (1)
- php (1)
- 架构 (0)
- UML (0)
- jdbc (0)
- 学习计划 (1)
- maven (1)
- mysql (2)
- git (0)
- hibernate (1)
- 测试工具 (0)
- 设计模式 (0)
- 面试准备 (1)
最新评论
做开发几年了,一直也没搞清楚spring的事务传播性怎么回事,用的不太到位,经常出问题,最近在架构师课程上又学习到了这个地方,正好我们现在做的项目也用到了.
public class ServiceA{
private ServiceB b;
void a(){
b.b3();
}
}
public class ServiceB{
void b1();
void b2();
void b3(){
b1();
b2();
}
}
假如传播性是 REQUIRED_NEW ,ServiceA,ServiceB 的 里面的方法都符合spring的切点规则,那么在调用 a() 的时候spring 容器会创建几个事务? 答案是2个. 在调用a()的时候一个,b.b3()此时又一个,虽然 b1(),b2()也符合切点规则但spring不会为他们2个启动新的事务.原因我们要从AOP的实现原理上来分析.
我们说AOP是在IOC的基础上出来的,没有IOC其实就没有AOP.spring 是利用代理来完成事务控制的.
// 这里假设是cglib代理
public class ServiceAProxy extends ServiceA{
private ServiceA svcA;
void a(){
begin transaction
svcA.a();
end transaction
}
}
public class ServiceBProxy extends ServiceB {
private ServiceB svcB;
void b1(){
begin transaction
svcB.b1();
end transaction
}
void b2(){
begin transaction
svcB.b2();
end transaction
}
void b3(){
begin transaction
svcB.b3();
end transaction
}
}
这样在调用a.a()时 只调用了A的代理方法a() 和 b的代理方法 b3(),所以只开启了2个事务.
public class ServiceA{
private ServiceB b;
void a(){
b.b3();
}
}
public class ServiceB{
void b1();
void b2();
void b3(){
b1();
b2();
}
}
假如传播性是 REQUIRED_NEW ,ServiceA,ServiceB 的 里面的方法都符合spring的切点规则,那么在调用 a() 的时候spring 容器会创建几个事务? 答案是2个. 在调用a()的时候一个,b.b3()此时又一个,虽然 b1(),b2()也符合切点规则但spring不会为他们2个启动新的事务.原因我们要从AOP的实现原理上来分析.
我们说AOP是在IOC的基础上出来的,没有IOC其实就没有AOP.spring 是利用代理来完成事务控制的.
// 这里假设是cglib代理
public class ServiceAProxy extends ServiceA{
private ServiceA svcA;
void a(){
begin transaction
svcA.a();
end transaction
}
}
public class ServiceBProxy extends ServiceB {
private ServiceB svcB;
void b1(){
begin transaction
svcB.b1();
end transaction
}
void b2(){
begin transaction
svcB.b2();
end transaction
}
void b3(){
begin transaction
svcB.b3();
end transaction
}
}
这样在调用a.a()时 只调用了A的代理方法a() 和 b的代理方法 b3(),所以只开启了2个事务.
发表评论
-
IO 包装流关闭
2016-04-27 17:31 462援引了一位网友的解释, 自己稍加改动, 保存留用 (1)J ... -
常用JVM 监控工具
2016-03-07 11:15 3761. jConsole JConsole是一 ... -
常用数据库连接池
2016-03-04 16:07 485dbcp - DBCP(DataBase conn ... -
bit与字节Byte的区别和联系
2015-01-23 14:40 974bit中文名称是位,音译“比特”,是用以描述电脑数据量的最 ... -
tomcat70源码导入Eclipse
2014-12-28 01:37 583最近想研究一下tomcat的源码,费了好些劲才将其顺利导入 ... -
配置使用连接池的httpClient
2014-11-27 19:51 3310httpClient4.3开始弃用了DefaultHttp ... -
RestTemplate用法
2016-03-02 16:26 642RestTemplate 这篇文章 ... -
spring学习之概览
2014-11-10 16:17 0打算学习spring源码很久了,一直没有行动,最近终 ... -
spring学习---导入源码到Eclipse工程
2014-11-10 16:54 659第一步: 磨刀不误砍柴工,先下载一个集成了Spring ... -
java序列化java.io.Externalizable(转)
2014-05-22 08:00 616这次我们讲的是控制对象的序列化和反序列化 控制序列化就是 ... -
为什么hashcode要使用31这个数
2014-05-21 15:11 739散列计算就是计算元素应该放在数组的哪个元素里。准确的说是放到哪 ... -
java.lang.LinkageError: JAXB 2.0 API is being loaded from the bootstrap classloa
2014-03-17 17:08 571重装系统后原来项目中的单元测试跑不了,报错Caused by: ... -
java处理大txt
2012-12-11 17:37 1000java 读取txt,java读取大文件 packa ... -
Class和ClassLoader的 getResource方法的区别
2012-11-14 15:48 906比如一个类A的包声明 为 p1.p2.p3 那么我们在调用 A ... -
安装jdk7,用java -version查看确是jkd1.4.x
2012-10-26 09:30 860新做的系统,发现eclipse启不来了,jdk没有安装,然后在 ...
相关推荐
Spring AOP 配置事务方法 Spring AOP(Aspect-Oriented Programming,面向方面编程)是一种编程范式,它允许开发者在不修改源代码的情况下,增强和修改应用程序的行为。 Spring AOP 提供了一种灵活的方式来实现事务...
在实际开发中,Spring AOP广泛应用于事务管理。例如,我们可以定义一个切面来处理所有数据库操作的事务,这样无需在每个业务方法中显式调用开始和提交事务,只需在切面中配置事务规则即可。 `aop-jar`这个压缩包...
Java Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许开发者在不修改原有代码的情况下,通过代理方式插入额外的功能,如日志、事务管理等。在这个主题中,我们将深入探讨Spring AOP如何处理事务管理...
总的来说,Spring AOP通过代理和通知机制,实现了横切关注点的模块化,使得业务逻辑与系统服务(如日志、事务等)解耦,提高了代码的可读性和可维护性。同时,引介功能进一步增强了切面的功能,可以为对象动态地添加...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来处理系统中的交叉关注点问题,如日志、事务管理、安全性等。本示例将简要介绍如何在Spring应用中实现AOP,通过实际的...
总结一下,Spring AOP提供了一种优雅的方式来处理系统的横切关注点,如日志记录、事务管理或性能监控。通过定义切点、创建切面和配置通知,我们可以实现代码的解耦,提高可维护性和复用性。这个例子提供了学习Spring...
现在,我们回到主题——"springaop依赖的jar包"。在Spring 2.5.6版本中,使用Spring AOP通常需要以下核心jar包: - `spring-aop.jar`:这是Spring AOP的核心库,包含了AOP相关的类和接口。 - `spring-beans.jar`:...
Spring AOP,全称Aspect-Oriented Programming(面向切面编程),是Spring框架的一个重要模块,它通过提供声明式的方式来实现面向切面编程,从而简化了应用程序的开发和维护。在Spring AOP中,我们无需深入到每个...
Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许程序员在不修改源代码的情况下,通过“切面”来插入额外的业务逻辑,如日志、事务管理等。AOP的引入极大地提高了代码的可复用性和可维护性。 ### 1. ...
4. **丰富的切入点表达式语言**:Spring AOP支持使用SpEL(Spring Expression Language)来定义复杂的切入点表达式,这让开发者能够更加灵活地控制通知的触发条件。 #### 四、Spring AOP的实现示例 接下来,我们...
- **事务管理**:Spring AOP的一个常见应用就是声明式事务管理,通过`@Transactional`注解可以轻松地在方法级别控制事务。 综上所述,spring AOP依赖的这三个jar包构成了Spring框架面向切面编程的基础,它们共同...
在Spring AOP中,你可以选择使用AspectJ的编译时或运行时织入,以实现更细粒度的控制和更高的性能。 2. **aspectjweaver.jar**:AspectJ Weaver是AspectJ框架的一部分,主要负责在运行时对类进行字节码操作,实现切...
在IT行业中,MyBatis、Spring AOP、Spring事务管理和反射工具类是常见的技术栈,它们在构建高效、灵活的企业级应用中起着至关重要的作用。以下是对这些知识点的详细阐述: 1. MyBatis拦截器(MyBatis Interceptor)...
Spring AOP(面向切面编程)允许开发者在不修改源代码的情况下,通过“切面”来插入新的行为或增强已有功能,而 Spring IOC(控制反转)则负责管理对象的生命周期和依赖关系,极大地简化了应用的架构。 **Spring ...
同时,由于事务管理是基于AOP的,因此可以灵活地应用于多个方法,而无需重复编写相同的事务控制代码。 总结一下,Spring基于AOP实现的事务管理通过TransactionProxyFactoryBean,结合声明式事务配置,能够提供一种...
Spring AOP事务管理是Java开发中的重要组成部分,它极大地简化了在分布式系统中对事务的处理。Spring通过AOP(面向切面编程)提供了一种声明式事务管理方式,允许开发者将事务规则与业务逻辑分离,提高了代码的...
- **事务管理**:通过AOP实现声明式事务管理,简化事务控制代码。 - **性能监控**:在关键方法前、后插入性能计时通知,便于性能分析。 - **权限校验**:在方法执行前进行用户权限验证,确保安全。 5. **源码...
9. **应用场景**:Spring AOP常用于日志记录、事务管理、性能监控、安全性控制等。例如,你可以定义一个切面来记录所有服务层方法的调用,或者在每次数据库操作前开启事务并在操作成功后提交事务。 通过以上介绍,...
Spring框架是Java开发中不可或缺的一部分,它主要由两个核心组件构成:IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)。本笔记将深入探讨这两个概念以及它们在Spring中...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来处理系统中的交叉关注点,如日志、事务管理、性能监控等。在使用Spring AOP时,通常需要引入特定的jar包来支持其功能。...