spring的AOP和事务

在Keil uv5里面添加STC元器件库,不影响其他元件 先到网上下载stc.CBD(宏晶网站的地址实效了)还有STC新系列单片机的头文件,宏晶的网站就有1、在Keil/C51/INC下新建目录"STC"文件夹, 把所有STC新系列单片机的头文件拷贝到"STC"目录下。2、下载的用于keil下的STC器件数据库更名为STC.CDB并拷贝到Keil/UV4目录下。3、打开Keil文件夹下的TOOLS.ini文件。4、在[UV2]下键入CDB0="UV2\S 阅读详情

1.通过PropertyPlaceholderConfigurer在Spring中加载其他外部配置文件或者属性文件:

在很多javaEE工程中,Spring的角色非常重要,是一个管理其他模块和组件的轻量级容器,Spring经常需要管理Struts、Ibatis、Hibernate等,这些开源框架的配置文件就通过Spring的PropertyPlaceholderConfigurer加载在Spring中进行管理,另外,数据库连接信息、JNDI连接信息属性文件等也可以通过PropertyPlaceholderConfigurer加载到Spring中来管理。用法如下:

(1).通过PropertyPlaceholderConfigurer将其他文件加载到Spring中:

在spring配置文件中添加如下配置:

[xhtml]  view plain copy
  1. <bean class=“org.springframework.beans.factory.config.PropertyPlaceholderConfigurer“>  
  2.        <property name=“locations“>  
  3.               <value>classpath:要加载的文件名</value>  
  4.               ……  
  5.        </property>  
  6. </bean>  
 

(2).经过(1)中的配置要加载的配置或属性文件就被加载到spring中,如果还需要在运行时使用加载进来的配置或数据文件的一些信息,如使用数据库连接信息或者JNDI连接信息时,就可以使用类型EL表达式的语法进行引用,例如:

[xhtml]  view plain copy
  1. <bean id=”dataSource” destroy-method=”close” class=”org.apache.common.dbcp.BasicDataSource”>  
  2.        <!--假设数据库连接信息写在外部属性文件中,已经被spring加载-->  
  3.        <property name=”driverClassName” value=”${driver}”/>  
  4.        <property name=”url” value=”${url}”/>  
  5.        <property name=”username” value=”${username}”/>  
  6.        <property name=”password” value=”${password}”/>  
  7. </bean>  
 

注意:也可以使用<context:Property-Placeholderlocation=”classpath:要加载的文件名”/>

2.Java的动态代理:

Spring的面向切面编程(AOP)底层实现原理是动态代理,因此在学习面向切面编程之前必须先了解动态代理。

Java中动态代理应用非常广泛,动态代理是23中设计模式中非常常用的经典设计模式之一。动态代理的原理是,当要调用一个目标对象或者其方法时,系统并不是直接返回目标对象,而是返回一个代理对象,通过这个代理对象去访问目标对象或者目标对象的方法。

动态代理的简单原理如下:

客户端调用者——>代理对象——>被调用的目标对象。

当客户端调用代理对象时,代理对象委派目标对象调用其业务方法。

动态代理分为两种,针对接口的动态代理和针对普通类的动态代理,java中的动态代理是真的接口的动态代理,cglib是针对普通类的动态代理,目标javaEE的依赖包和Spring的jar包中已经包含了cglib相关jar包,因此即可以对代理也可以对普通类进行动态代理。

(1).java的针对接口动态代理:

Java中的动态代理只能针对接口进行动态代理,因此,目标对象必须实现接口,代理对象要实现目标对象的所有接口。工作流程如下:

a.      动态代理类编写:

注意:动态代理必须实现InvocationHandler接口,同时实现以下方法:

[java]  view plain copy
  1. Object invoke(Objectm代理实例,Method代理实例上调用的接口方法的Method 实例,Object[] 传入代理实例上方法调用的参数值的对象数组);  
 

安装JDK的文档说明,该方法作用是传递代理实例、识别调用方法的 java.lang.reflect.Method 对象以及包含参数的 Object 类型的数组。调用处理程序以适当的方式处理编码的方法调用,并且它返回的结果将作为代理实例上方法调用的结果返回。

b.      创建代理对象:

[java]  view plain copy
  1. Proxy.newProxyInstance(类加载器, Class<?>[]接口数组,回调代理对象(一般是this))  
 

当调用目标对象方法时,通过该方法创建目标对象的代理对象,代理对象会自动调用其invoke方法调用目标对象,并将调用结果返回。

(2).cglib针对普通java类动态代理:

cglib创建动态代理时,不要求目标类必须实现接口,其工作流程如下:

a.动态代理类编写:

[java]  view plain copy
  1. Enhancer  enhancer = new Enhancer();  
  2. //设置目标类的父类为其本身  
  3. enhancer.setSuperclass(目标类对象.getClass());  
  4. //设置回调对象为动态代理对象本身  
  5. enhancer.setCallback(this);  
 

b.实现MethodInterceptor接口:

实现以下方法:

[java]  view plain copy
  1. Object intercept(Objectm代理实例,Method代理实例上调用的接口方法的Method 实例,Object[] 传入代理实例上方法调用的参数值的对象数组,MethodProxy 方法代理实例);  
 

注意:cglib不但可以针对类动态代理,还可以针对方法动态代理。

3.面向切面编程(AOP)的基础概念:

以一个普通的java方法来举例

[java]  view plain copy
  1. public 返回类型 方法名(参数列表){ ——>环绕通知  
  2.        方法前处理代码    ——>     前置通知  
  3. try{  
  4.        方法具体实现(方法体)…….  
  5.        方法后处理代码    ——>     后置通知  
  6. }Catch(异常类型 e){  
  7.        异常处理……       ——>     例外通知  
  8. }finally{  
  9.        最后处理代理……       ——>     最终通知  
  10. }  
  11. }  
 

a.      横切关注点:如上面5个通知的位置,在java对象中,可以这些具有类似共同处理逻辑的位置加入如权限验证、事物处理、日志记录等处理逻辑的对象称为横切关注点,面向对象编程(OOP)的关注点是纵向将现实世界的事物抽象成编程的对象模型。而面向切面编程(AOP)的关注点是横向的,它将编程对象模型中拥有类似处理逻辑的地方抽象出来形成切面,而编程对象中的处理逻辑就是横切关注点。

b.      切面(Aspect):将横切关注点抽象就形成切面,与类类似,二者关注点不同,类是事物特性的抽象,切面是横切关注点的抽象。

c.      连接点(Joinpoint):被拦截到的点,在Spring中指方法,因为spring只支持方法类型的连接点,即被拦截的方法。如上面例子的方法。

d.      切入点(Pointcut):指对连接点进行拦截的定义,是连接点的集合,即一系列被拦截方法的集合。

e.      通知(Advice):指拦截到连接点之后要做的事情,即拦截之后的逻辑处理。通常的权限验证、事物处理、日志记录等操作就是在通知中定义和完成的。

f.       目标对象(Target):代理的目标对象,即被拦截的对象。如上面例子中方法所在的对象。

g.      织入(Weave):指将切面应用到目标对象,并导致代理对象创建的过程。

h.      引入(Introduction):在不修改代码的前提下,引入可以在运行期为类动态的添加一些方法和字段。

1.      Spring中支持面向切面编程(AOP)的依赖包:

Spring解压后目录中的如下3个包:

lib/aspectj/aspectjweaver.jar

lib/aspectj/aspectjrt.jar

lib/cglib/cglib-nodep-2.1-3.jar

2.      在spring中使用面向切面编程(AOP)时,需要在spring配置文件中引入aop的命名空间,即添加如下的配置:

[xhtml]  view plain copy
  1. xmlns:aop=”http://www.springframework.org/schema/aop”  
  2. “http://www.springframework.org/schema/aop  
  3. http://www.springframework.org/schema/aop/spring-aop-2.5.xsd”  
 

注意:Spring2.5以后提供两种AOP方法,即基于xml配置文件方式和基于java注解方式。

若要使用注解方式的aop,需要在spring配置文件中添加如下的对象注解方式aop的支持:

[xhtml]  view plain copy
  1. <aop:aspectj-autoProxy/>  
 

6.    JavaBean的包装类——BeanWrapper:

Spring通过BeanWrapper类封装一个javabean的行为,可以设置和获取其属性值,如:

[java]  view plain copy
  1. BeanWrapper 包装类对象 = BeanWrapperImpl(new 被包装类());  
  2. 包装类对象.setPropertyValue(“属性名”,”属性值”);  
 

通过这种方法就可以给被包装类设置属性。

7. 基于注解方式的面向切面编程(AOP)开发:

(1).在spring配置文件中加入对注解方法的aop支持。

(2).定义切面:

和创建普通类类似,在类前加上”@Aspect”注解,表明该类是一个切面。

(3).在切面中加入切入点:

切入点就是被拦截对象方法的集合,通常切入点定义在切面中某个对切入点进行处理的方法上。使用”@Pointcut”注解,语法如下:

[java]  view plain copy
  1. @Pointcut(“execution(* com.test.service..*.*(..))”)  
  2. public void anyMethod(){//方法名为切入点名  
  3. 切入点处理  
  4. }  
 

语法参数详解:

a. 第一个”*”:表示被拦截的方法是任意的返回类型。

b. com.test.service:这里是举一个简单的例子,表示要被拦截的包名,即被拦截的包。

c.被拦截包名后面的两个”..”:表示被拦截包下面的子包也递归进行拦截,即被拦截的子包。

d. ”..”之后的”*”:表示被拦截包及其子包下面的所有类,即被拦截的类。

e. 最后一个”*”:表示被拦截类中的所有方法,即被拦截的方法。

f. ”(..)”:表示被拦截的方法接收任意的参数,即被拦截的参数。

注意:切入点定义语法可以支持通配符,但是一定要严格遵循语法规则。如:

@Pointcut(“execution(*com.test.service..*.add*(..))”)

表示对com.test.service包及其子包下所有的类中以”add”开头的方法进行拦截。

(4).在切面中添加通知:

Spring中通知位置请参看3中的小例子。

”@Before”注解:声明前置通知。

“@AfterRutruning”注解:声明后置通知。

“@After”注解:声明最终通知。

“@AfterThrowing”注解:声明例外通知。

“@Around”注解:声明环绕通知。

一个定义通知的例子如下:

[java]  view plain copy
  1. @Before(“anyMethod()(切面中声明的切入点名)”)  
  2. public void doAccessCheck(){  
  3.        ……  
  4. }  
 

注意:环绕通知和其他4种通知的稍有不同,环绕通知的定义方式比较特别,环绕通知在整个方法调用前后都会起作用,因此必须使用连接点对象告诉连接点在环绕通知处理之后继续其逻辑处理。其定义方式如下:

[java]  view plain copy
  1. @Around(切入点名)  
  2. public Object doBasicProfiling(ProcedingJoinPoint pjp) throws Throwable{  
  3.        ……  
  4.        return pjp.proceed();//该句是告诉连接点继续执行其他的操作  
  5. }  
 

7.      基于注解方式的面向切面编程(AOP)开发的一些小技巧:

(1).获取输入参数:

如:

[java]  view plain copy
  1. @Before(“切入点名 && args(输入参数名)”)  
  2. public void doSomething(String 输入参数名){……}  
 

(2).获取返回结果:

如:

[java]  view plain copy
  1. @AfterReturning(Pointcut=”切入点名”,returning=”返回结果名”)  
  2. public void dosomething(String 结果名){……}  
 

8.      基于XML方式的面向切面编程(AOP)开发:

(1).定义切面类,在切面类中添加通知。

(2).将切面类想普通java类一样在spring配置文件中配置。

(3).在spring配置文件中添加AOP配置如下:

[xhtml]  view plain copy
  1. <aop:config>  
  2.        <!--配置切面-->  
  3.        <aop:aspect id=”切面id” ref=”spring配置文件中切面类的id”>  
  4.               <!--配置切入点-->  
  5.               <aop:pointcut id=”切入点id”  
  6. expression=”execution(* com.test.service..*.*(..))”/>  
  7.               <!--配置通知-->  
  8.               <aop:before pointcut-ref=”切入点id” method=”切面类中相应的处理方法”/>  
  9.               <aop:after ……/>  
  10.               ……  
  11. </aop:aspect>  
  12. </aop:config>  
 

9.      Spring的事务处理(Spring的声明式事务处理):

事务简单来说是指数据库中的一条最基本的操作,关于事务的详细讲解以后会在数据库相关总结中具体说明。Spring的面向切面编程(AOP)一个最重要的应用是事务管理,Spring2.5以后版本的事务管理支持基于注解的方式和基于XML文件的方式两种:

(1).基于注解方式的事务管理:

a. 在spring配置文件中添加事务管理的命名空间如下:

[xhtml]  view plain copy
  1. xmlns:ts=http://www.springframework.org/schema/tx  
  2. http://www.springframework.org/schema/tx  
  3. http://www.springframework.org/schema/tx/spring-tx-2.5.xsd  
 

b. 在spring配置文件中配置事务管理器如下:

[xhtml]  view plain copy
  1. <bean id=”txManager” class=”org.springframework.jdbc.datasource.DataSourceTransactionManager”>  
  2.        <property name=”dataSource” ref=”spring中配置的数据源bean的id”/>  
  3. </bean>  
 

c.      在spring配置文件中添加支持注解方式的事务配置项如下:

[xhtml]  view plain copy
  1. <tx:annotation-driventransaction-managertx:annotation-driventransaction-manager=”txManager(spring中配置的事务管理器bean的id)”/>  
 

d.      使用基于注解的事务管理:

在Spring所管理的JavaEE工程中,需要使用事务的业务逻辑地方加上“@Transactional”注解。

(2).基于XML文件方式的事务管理:

a. 在spring配置文件中配置事务管理器如下:

[xhtml]  view plain copy
  1. <bean id=”txManager” class=”org.springframework.jdbc.datasource.DataSourceTransactionManager”>  
  2.        <property name=”dataSource” ref=”spring中配置的数据源bean的id”/>  
  3. </bean>  
 

b.      在spring配置文件中添加事物管理的切面如下:

[xhtml]  view plain copy
  1. <aop:config>  
  2.        <!--配置事务切入点-->  
  3.        <aop:pointcut id=”transactionPointcut”  
  4. Expression=”execution(* com.test.service..*.*(..))”/>  
  5. <!--配置事务通知-->     
  6. <aop:advisor advice-ref=”txAdvice” pointcut-ref=”transactionPointcut”/>  
  7. </aop:config>  
 

c.      在spring配置文件中为事务通知添加事物处理特性如下:

[xhtml]  view plain copy
  1. <tx:advice id=”txAdvice” transactionManager=”txManager”>  
  2.        <tx:attributes>  
  3.               <!--这里举例将以get开头的查询方法设置为只读,不支持事务-->  
  4.               <tx:method name=”get*” read-only=”true” propagation=”NOT_SUPPORTED”/>  
  5.               <!--其他的方法设置为spring默认的事物行为-->  
  6.               <tx:method name=”*”/>  
  7.        </tx:attributes>  
  8. </tx:advice>  
 
【WRF模拟】如何查看 WPS 的输入静态地理数据(二进制格式)? 如何查看 WPS 的输入静态地理数据(二进制格式)? 阅读详情

相关推荐

1.3-----Simplify 3D切片软件:从新手困惑到高效打印的进阶设置指南

本文详细介绍了Simplify 3D切片软件在大型模型打印中的高效设置技巧,包括切片效率、支撑结构智能生成和精细参数调节等核心优势。通过实战案例和进阶参数设置指南,帮助用户从新手快速进阶到高效打印,显著提升3D打印质量和效率。

weixin_42552716的博客 422

Spring源码(二):Spring系统属性、spring.properties配置文件

1、spring中有一个SpringProperties类,来保存spring的系统属性。2、在resoreces路径下创建spring.properties配置文件,使用键值对的形式设置spring系统属性。1)可以使用=(等号)或者:(冒号);2)字符串键两边可以加空格(" ")、制表符(\t)、换页符(\f)即在换行后行尾有一个;3)可以使用//将配置注释掉,只能使用单行注释。3、spring在创建容器时会加载AbstractApplicationContext类,加载类时会加载静态属性。

weixin_44843569的博客 1113

蛋白质组学进阶指南 | (八)差异蛋白筛选与功能解析实战

本文是蛋白质组学差异蛋白筛选与功能解析的实战指南。详细讲解了如何利用R语言的limma包进行差异表达分析,结合FDR校正和差异倍数设定筛选关键蛋白,并通过火山图可视化结果。进一步介绍了使用clusterProfiler进行GO与KEGG功能富集分析,以及利用STRING数据库和Cytoscape构建蛋白互作网络以识别枢纽分子,最终串联分析形成可验证的生物学假说。

weixin_29208077的博客 743

Spring学习笔记2——高级特性

1.通过PropertyPlaceholderConfigurer在Spring中加载其他外部配置文件或者属性文件: 在很多javaEE工程中,Spring的角色非常重要,是一个管理其他模块和组件的轻量级容器,Spring经常需要管理Struts、Ibatis、Hibernate等,这些开源框架的配置文件就通过Spring的PropertyPlaceholderConfigurer加载在Spri

Tony Chen的专栏 9314

Qt开发实战:QWebEngineView缓存路径详解与自定义配置(Windows/Linux)

本文详细解析了Qt框架中QWebEngineView组件的缓存机制,提供了Windows和Linux系统下的默认缓存路径及自定义配置方案。通过实战代码示例,展示了如何实现跨平台缓存路径管理、权限设置以及企业级应用中的多用户隔离策略,帮助开发者有效管理Web内容缓存,提升应用性能和数据安全性。

weixin_42519826的博客 404

智能家居DIY:用51单片机实现三合一环境监测(温湿度+烟雾+自动灭火)

本文详细介绍了如何利用STC89C52单片机打造智能家居三合一环境监测系统,集成温湿度检测、烟雾报警和自动灭火功能。从硬件选型、电路设计到软件编程,提供完整的DIY方案,帮助读者构建高性价比的家庭安全防护系统,特别适合智能家居爱好者和电子DIY初学者。

yhn4567890的博客 692

Spring官网阅读(十六)Spring中的数据绑定

在前面的文章我们学习过了Spring中的类型转换以及格式化,对于这两个功能一个很重要的应用场景就是应用于我们在XML中配置的Bean的属性值上,如下: <bean class="com.dmz.official.converter.service.IndexService" name="indexService"> <property name="name" value="...

做一个认真的程序员 4539

UDS诊断ISO14229新手入门篇

这个命令的格式稍微复杂一点。sub-function = 0x06 用于读取某个 DTC 及其相关的环境数据,此时 parameter 为 4 个 byte,前三个 byte 用于标识我们要读取的 DTC,第四个 byte 用于标识要读取的环境数据的范围,UDS 规定使用 FF 来表示读取所有的环境数据,各厂家可以要根据自己的需求定义其他的值来代表要读取的环境数据的范围。环境数据包括 DTC 状态,优先级,发生次数,老化计数器,时间戳,里程等,厂家还可以根据自己的需求定义一些此 DTC 产生时的测量数据。

weixin_45387165的博客 1974

Spring -- 依赖注入源码分析

阅读这篇博客,http://www.cnblogs.com/ITtangtang/p/3978349.html下面我们直接抓住依赖代码的入口方法,整理代码的运行思路。 spring jar包版本4.2.6核心代码:AbstractAutowireCapableBeanFactory.class 核心方法:503行代码 protected Object doCreateBean 其中2行主要的

GP的空间 983

告别GIS软件!用R语言ggplot2+ggmapcn绘制出版级世界地图(附5种投影对比图)

本文提供了一份完整的实践指南,教你如何利用R语言及其强大的ggplot2生态系统,结合ggmapcn包,绘制出出版级的世界地图。文章详细对比了五种经典地图投影(如摩尔维德、罗宾森投影)的代码实现与视觉差异,并讲解了如何添加比例尺、指北针等专业元素,最终导出高清PDF,实现从数据分析到专业可视化的全流程代码化操作,彻底告别传统GIS软件。

p5l2m9n4o6q的博客 408

uniapp - 实现集成调用zebra斑马打印机+打印标签+打印二维码详细实例代码,通过蓝牙连接打印机打印与通过打印机IP和端口两种方式适配斑马打印机(全平台兼容H5、微信小程序、苹果安卓App)

uniapp适配斑马打印机 实现标签打印,uniapp适配斑马打印机实现标签打印,uniapp调用zebra斑马打印机打印标签,uniApp连接传统蓝牙的斑马打印机打印,实现标签打印功能uniapp 蓝牙连接斑马打印机发送zpl指令打印,适配斑马(Zebra)牌打印机,小程序调用蓝牙打印机完整代码,uniapp 打印机wifi链接 蓝牙链接,uniapp斑马打印机,实现二维码标签展示以及打印,APP端连接打印机打印小票和标签,uniapp使用斑马打印中文不出来,打印机连接不上,打印没反应怎么办,打印报错,斑

🏆 前端领域优质创作者 1万+

Spring IOC 三大高级特性(简述)

spring IOC 特性

weixin_43878909的博客 511

零基础教你学RDMA驱动开发--第8篇:队列对(QP)、完成队列(CQ)与工作请求(WR)机制剖析

本文深入剖析了RDMA(远程直接内存访问)中的核心机制:队列对(QP)、完成队列(CQ)和工作请求(WR)。QP作为通信端点包含发送队列(SQ)和接收队列(RQ);WR是用户提交的操作指令,转换为工作队列元素(WQE)后由网卡异步执行;CQ则提供完成通知机制。文章详细介绍了三者的协作原理,包括QP状态机、WR提交方式、CQ轮询机制,以及关键的信号控制技术(Signaled Mode)来优化性能。同时对比了SEND/RECV和RDMA WRITE两种模式的差异,提供了调试技巧和最佳实践。这些机制共同构成了RD

amy_mhd的博客 157

Spring事务和AOP

记录spring事务以及AOP学习

现在的我强的可怕 1302

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Spring二:AOP和事务

Spring AOP和事务的介绍以及代码实现,文末附源码,供入门者下载学习

青衫忆笙的博客 3059

[Java EE] Spring AOP 和 事务

本文总结了 Spring AOP 与相关功能的核心内容。AOP(面向切面编程)通过横切关注点(如日志、权限、事务)将系统功能与业务逻辑解耦,核心概念包括切点、连接点、通知和切面。常见通知类型有环绕、前置、后置、返回后和异常后通知,并可通过 @Pointcut 与切面表达式(execution、@annotation)灵活定义。Spring AOP 底层基于代理模式实现,支持静态代理和动态代理(JDK 动态代理与 CGLIB)。在实际开发中,SpringBoot 常结合 AOP、拦截器实现统一功能处理,如统一

Miraitowa_cheems的博客 1303

spring AOP 和spring 基于AOP的事务控制

Spring AOP 1.转账案例中的事务问题 图中每一个操作都有一个connection,程序无错,就提交,但是回滚各操作间不影响。 所以要使用ThreadLocal对象把Connction和当前线程绑定,从而使一个线程中只有一个类控制事务的对象。 2.动态代理 2.1概念及其作用: 动态代理:是使用反射和字节码的技术,在运行期创建指定接口或类的子类,以及其实例对象的技术,通过这个技术可以无侵入的为代码进行增强 2.2特点: 字节码随用随创建,随用随加载 2.3分类 2.3.1基于接口的动态代理 涉及的

a359702798的博客 460

Spring AOP和事务

SpringAOP和事务详解

m0_66139172的博客 197

spring AOP和事务

AOP是在不改原有代码的前提下对代码进行增强在数据层保障一系列的数据库操作同成功同失败在数据层或业务层保障一系列的数据库操作同成功同失败。

m0_73829332的博客 197

spring事务和AOP原理剖析

spring事务(springBoot2.0默认走CGlib代理) 1.EnableTransactionManagement 1)注解上标了注解Import,导入了TransactionManagementConfigurationSelector类,类实现了AdviceModeImportSelector接口 2)该接口导入了两个类AutoProxyRegistrar和ProxyTransactionManagementConfiguration 3)注册类AutoProxyRegistrar实现了Im

weixin_39296289的博客 546

面试常问Spring AOP和事务注解@Transactional原理

这个抽象类的实现类之一就是,这个抽象代理构建类从某种意义上来说,只要Spring IOC容器中有这个Bean的实现,就相当于是开启了AOP功能。AbstractAdvisorAutoProxyCreator实现了,所以它本质上来说也是一个Spring的后置处理器,在Spring Bean实例化后,在初始化前后会经过这个后置处理器的加工,从而来实现AOP的代理生成。

weixin_74412978的博客 1869

Spring AOP和Spring事务管理

在现代软件开发中,处理横切关注点(cross-cutting concerns)和管理事务是非常重要的技术。Spring框架提供了两个核心特性来处理这些问题:Spring AOP和Spring事务管理。本文将详细探讨Spring AOP和Spring事务管理的概念、原理以及如何在实际应用中应用它们。

qq_73004234的博客 235

Spring AOP和事务学习

1.1:事务的简介:举个简单的例子,转账业务会有两次数据层的调用,一次是加钱一次是减钱把事务放在数据层,加钱和减钱就有两个事务没办法保证加钱和减钱同时成功或者同时失败这个时候就需要将事务放在业务层进行处理。Spring为了管理事务,提供了一个平台事务管理器PlatformTransactionManager。1.2事务的概念:事务是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作,这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行;

2301_80951806的博客 145

Spring AOP 多个AOP和Spring事务绑定同一个方法

背景 最近学了Spring的AOP,Spring AOP是通过JDK和cglib的动态代理实现的。 而Spring的事务控制是基于AOP的,而我在学习Spring事务和AOP的时候将它们混合运行的时候 Spring的事务控制失效了,执行错误后不再进行回滚了,其它的AOP正常运行。 在网上参考这篇博客: https://blog.youkuaiyun.com/qqxhwwqwq/article/details/51678595 以下是我较为拙劣的测试过程: 首先我们要准备两个自定义好的AOP AOP1 @Componen

sky 1458
上一篇: 【Java集合源码剖析】ArrayList源码剖析
下一篇: Spring编程式事务管理及声明式事务管理
andybbc
博客等级 码龄11年 64粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值