<!--事务注解-->
<tx:annotation-driven />
<!-- 事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--Spring AOP事务配置-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" rollback-for="Exception"/>
<tx:method name="insert*" rollback-for="Exception"/>
<tx:method name="update*" rollback-for="Exception"/>
<tx:method name="*" read-only="true" propagation="NOT_SUPPORTED" />
</tx:attributes>
</tx:advice>
<aop:config proxy-target-class="true">
<aop:pointcut id="serviceImplMethod" expression="execution(* com.xx.xx.xx.service.impl..*.*(..))"/>
<aop:advisor pointcut-ref="serviceImplMethod" advice-ref="txAdvice"/>
<!-- <aop:pointcut id="daoMethod"
expression="execution(* com.xx.xx.dao.impl..*.*(..))"/>
<aop:advisor pointcut-ref="daoMethod" advice-ref="txAdvice"/> -->
</aop:config>
需要注意的地方:
(1) advice(建议)的命名:由于每个模块都会有自己的Advice,所以在命名上需要作出规范,初步的构想就是模块名+Advice(只是一种命名规范)。
(2) tx:attribute标签所配置的是作为事务的方法的命名类型。
如<tx:method name="save*" propagation="REQUIRED"/>
其中*为通配符,即代表以save为开头的所有方法,即表示符合此命名规则的方法作为一个事务。
propagation="REQUIRED"代表支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
(3) aop:pointcut标签配置参与事务的类,由于是在Service中进行数据库业务操作,配的应该是包含那些作为事务的方法的Service类。
首先应该特别注意的是id的命名,同样由于每个模块都有自己事务切面,所以我觉得初步的命名规则因为 all+模块名+ServiceMethod。而且每个模块之间不同之处还在于以下一句:
expression="execution(* com.test.testAda.test.model.service.*.*(..))"
其中第一个*代表返回值,第二*代表service下子包,第三个*代表方法名,“(..)”代表方法参数。
(4) aop:advisor标签就是把上面我们所配置的事务管理两部分属性整合起来作为整个事务管理。
/**
* @Description: annotation实现AOP,session超时和日志控制
*/
@Aspect
@Component
public class SessionAop {
/**
* 定义PointCut,无返回值,只是一个标识。 括号内容是表达式,标识哪些对象的哪些方法
* @Pointcut("execution(* add*(..)) || execution(* del*(..))")
*/
@Pointcut("execution(public* com.xx.xx.xx.controller.*.*(..))")
private void servletCall() {
}
/**
* 方法执行前处理
*
* @param jp
*/
@Before("servletCall()")
public void sessionTimeOutExceptionAspect(JoinPoint jp) {
User user = null;
for (Object param : jp.getArgs()) {
if (param instanceof HttpServletRequest) {
user = (User) ((HttpServletRequest) param).getSession().getAttribute(ConstantsCtr.SESSION_USER);
}
}
if (user == null) {
throw new RuntimeException("操作超时");
}
System.out.println("servletCallBefore" + user.getId());//test
}
}
分享到:
相关推荐
Spring 事务管理也可以与AOP结合,通过`aop:config`标签定义切点和通知,来实现事务的声明式管理。这种方式更加灵活,可以实现更细粒度的事务控制。 在实际开发中,根据项目需求和团队习惯,可以选择适合的事务...
3. **代理机制**:Spring通过代理来实现事务的拦截和管理。主要有两种代理方式:基于接口的JDK动态代理和基于类的CGLIB代理。 接下来,我们将详细探讨五种事务管理配置方式: ### 第一种:每个Bean都有一个代理 在...
6. **TransactionInterceptor**:Spring AOP的拦截器,负责在方法调用前后执行事务管理逻辑。它根据`@Transactional`注解的配置来决定何时开始、提交或回滚事务。 7. **TransactionAttributeSource**:用于查找方法...
标题:事物管理配置文件 描述:本篇详细解析了在SSH(Struts+Spring+Hibernate)框架整合过程中,Spring配置事务管理的...这些配置展示了Spring框架强大的事务管理和AOP能力,对于构建复杂的企业级应用具有重要意义。
"spring源代码解析(五):spring AOP获得proxy.doc"和"spring源代码解析(七):spring AOP中对拦截器调用的实现.doc"详细解释了AOP代理的生成过程,以及Aspect的实现和通知的执行流程。 5. **事务管理**:"spring...
在Spring Boot应用中,我们...以上就是使用Spring Boot、MyBatis和AOP实现多数据源切换并保证事务有效性的详细步骤。这个实例适用于简单的读写分离场景,如果涉及到更复杂的分布式事务需求,还需要进一步扩展和调整。
下面我们将深入探讨SSH中的事务管理和配置。 首先,SSH中的每一个组件都有其在事务处理中的角色: 1. **Struts2**:作为MVC框架,主要负责用户界面和业务逻辑的交互,通常不直接处理事务。但是,可以通过Action...
Spring 声明式事务处理 Spring 中的事务处理可以分为两种方式:声明式事务处理和编程式事务处理。...通过使用 AOP 和 IoC 容器,我们可以轻松地实现事务管理,并且可以灵活地配置事务管理的属性信息。
"spring-控制事物回滚"这个主题主要涉及Spring如何在出现异常时自动或手动触发事务的回滚,以及如何配置和使用Spring的事务管理机制。我们将深入探讨Spring事务管理的原理、API使用以及在实际开发中的应用。 首先,...
### Spring配置文件中的AOP应用解析 #### 一、AOP基本概念与应用场景 面向切面编程(Aspect Oriented Programming, AOP)是Spring框架的一个重要特性,它提供了一种在程序运行期间横向插入功能(比如日志记录、...
spring4.0和hibernate4.0框架的标准整合,此框架实现了hibernate根据实体自动创建表(前提是你要在mysql中创建名为testspring的库),spring的aop拦截功能,帮助了解aop,和spring事物控制,异常回滚以及junit4的测试...
1. **AOP代理**:Spring使用AOP(面向切面编程)来拦截带有`@Transactional`的方法调用。 2. **事务初始化**:当代理方法被调用时,Spring会检查当前是否存在事务。如果没有,就会根据注解上的配置启动一个新的事务...
Spring框架是Java开发领域中最重要的技术之一,它是一个开源的轻量级框架,提供了全面的编程和配置模型。Spring框架的核心特性包括依赖注入(DI)、面向切面编程(AOP)、事务管理、数据访问抽象等。本杂谈将围绕...
### Struts+Hibernate+Spring集成开发知识点 #### 一、集成环境搭建 1. **创建Web Project** - 创建一个Java EE类型的Web...在整个过程中,需要注意各框架之间的相互协作和配置细节,以确保系统的稳定性和高效性。
Spring的AOP支持包括代理模式和切面定义,可以方便地实现方法拦截和通知。 Spring框架包含七大模块,涵盖了不同层面的应用需求: 1. 核心容器(Core Container):包含Bean工厂(BeanFactory)和...
5. **其他配置**:除了基本的bean定义和依赖注入,`applicationContext-service.xml`还可以包含其他高级配置,如缓存支持、定时任务、事物拦截器等。例如,我们可以配置Spring的Cache抽象来实现缓存功能。 6. **与...
业务层:Spring IOC、Aop事务控制、Spring Task任务调度、Feign、Ribbon、Spring AMQP、Spring Data Redis等 控制层:Spring MVC、FastJSON、RestTemplate、Spring Security Oauth2+JWT等 微服务治理:Eureka、Zuul...
SpringBoot简化了Spring应用的初始化和配置,而MyBatis是一个优秀的持久层框架,它支持定制化的SQL、存储过程以及高级映射。在SpringBoot中,我们可以通过AOP(面向切面编程)来实现事务管理,而事务注解(如@...
2:Spring AOP:通过配置管理特性 3:Spring ORM:Spring框架集成了若干ORM框架 4:Spring DAO:打开关闭数据库连接 5:Spring WEB:为基于WEB服务的应用程序提供上下文服务 6:Spring Context:向Spring框架...
****比较适合新手理解SSH框架***** 闲下来搭了个SSH框架,写些小系统的话可以直接拿来用哦。 连接池是proxool,log4... 搭这个框架的初衷主要是想自己配置一下spring整合proxool以及aop思想对service层的事物控制等。