接口:
public interface UserService {
public void addUser(String username, String password);
public void deleteUser(int id);
public void updateUser(int id, String username);
public List queryUser(String username);
}
接口的实现:
public class UserServiceImpl implements UserService {
private DataSource dataSource;
public void addUser(String username, String password) {
//正确的sql
String sql = "insert into aaa (t1,t2,t3) values (seq_food.nextval,'"+username+"','"+password+"')";
System.out.println(sql);
JdbcTemplate jdbcTemplate = new JdbcTemplate(getDataSource());
jdbcTemplate.update(sql);
}
public void deleteUser(int id) {
}
public void updateUser(int id, String username) {
//错误的sql,测试回滚
String sql = "update aa set t2='"+username+"' where t1='"+id+"'";
System.out.println(sql);
JdbcTemplate jdbcTemplate = new JdbcTemplate(getDataSource());
jdbcTemplate.update(sql);
}
public List queryUser(String username) {
return null;
}
public DataSource getDataSource() {
return dataSource;
}
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
}
测试servlet:
public class UserServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(getServletContext());
try {
UserService userService = (UserService) ctx.getBean("userService");
userService.addUser("1", "2");
userService.updateUser(10032190, "zf");
} catch (DataAccessException e) {
e.printStackTrace();
}
}
}
spring配置文件:
<?xml version="1.0" encoding="GB2312"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>org.logicalcobwebs.proxool.ProxoolDriver</value>
</property>
<property name="url">
<value>proxool.foodManage</value>
</property>
</bean>
<bean id="jdbcTemplate"
class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 事务管理 -->
<bean id="txManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="query*" propagation="REQUIRED" read-only="true" rollback-for="Exception"/>
<tx:method name="*" propagation="REQUIRED" rollback-for="Exception"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="userServiceOperation" expression="execution(* cn.com.xy.service.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="userServiceOperation"/>
</aop:config>
<bean id="userService" class="cn.com.xy.imp.UserServiceImpl">
<property name="dataSource" ref="dataSource" />
</bean>
</beans>
做了一个简单的测试,使用上述的配置和测试代码,运行后,没有更新成功,但还是插入了一条新数据,事务回滚没有起作用,正确的应该是既不更新也不插入,编程式事务测试是好的,但是声明式事务就不对了,可能spring的配置不对,还望大家帮忙看看。
分享到:
相关推荐
这通常包括Spring Core、Spring Beans、Spring Context、Spring AOP、Spring ORM(对象关系映射)等核心模块的jar文件。这些jar包的组合使得开发者可以在项目中实现依赖注入、事务管理、数据访问、Web应用集成以及...
基于Cglib简单实现Spring体系(Ioc+Aop+Mvc)基于Cglib简单实现Spring体系(Ioc+Aop+Mvc)基于Cglib简单实现Spring体系(Ioc+Aop+Mvc)基于Cglib简单实现Spring体系(Ioc+Aop+Mvc)基于Cglib简单实现Spring体系(Ioc+Aop+Mvc)...
在IT行业中,构建大型分布式系统时,数据源的动态切换是一项关键能力,它允许系统根据业务需求选择不同的数据库进行操作...同时,这也展示了Spring框架的强大灵活性和扩展性,以及AOP在解决横切关注点问题上的高效性。
spring-aop-5.3.22.jar Spring AOP provides an Alliance-compliant aspect-oriented programming implementation allowing you to define method interceptors and pointcuts to cleanly decouple code that ...
标题中的"Spring+Hibernate+junit+aop"是一个经典的Java企业级开发组合,这些技术都是Java后端开发中的重要组成部分。让我们逐一深入理解这些知识点: 1. **Spring**:Spring 是一个开源的应用框架,核心功能包括...
编程语言+JAVAspring+AOP编程+面向切面...它介绍了JAVAspring的AOP编程的概念、原理和作用,以及如何使用JAVAspring的AOP编程来实现面向切面的功能,包括切点、通知、切面、织入的概念,以及一些配置文件和注解的用法。
Spring AOP 配置事务方法 Spring AOP(Aspect-Oriented Programming,面向方面编程)是一种编程范式,它允许开发者在不修改源代码的情况下,增强和修改应用程序的行为。 Spring AOP 提供了一种灵活的方式来实现事务...
spring-aop-1.1.1.jar spring-aop-1.2.6.jar spring-aop-1.2.9.jar spring-aop-2.0.2.jar spring-aop-2.0.6.jar spring-aop-2.0.7.jar spring-aop-2.0.8.jar spring-aop-2.0.jar spring-aop-2.5.1.jar spring-aop-...
然后配置Spring的applicationContext.xml,包括Bean定义、AOP配置、数据源、事务管理器等。接着配置Spring MVC的servlet-context.xml,设置DispatcherServlet、视图解析器、拦截器等。最后,配置MyBatis的mybatis-...
首先,`Spring AOP`是Spring框架的一部分,它允许我们在不修改源代码的情况下,对应用程序的关键行为进行拦截和增强。例如,日志记录、事务管理、性能监控等都可以作为横切关注点,通过AOP来实现。Spring AOP通过...
在"Spring+proxool+hibernate+struts2+aop"的整合中,Spring负责整体的依赖管理和事务控制,Struts2处理请求转发和视图展示,Hibernate处理数据库操作,而AOP则用来实现跨切面的关注点。 在提供的"Spring+proxool+...
开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE...
在IT行业中,MyBatis、Spring AOP、Spring事务管理和反射工具类是常见的技术栈,它们在构建高效、灵活的企业级应用中起着至关重要的作用。以下是对这些知识点的详细阐述: 1. MyBatis拦截器(MyBatis Interceptor)...
在Spring框架中,面向切面编程(Aspect Oriented Programming,简称AOP)是一种强大的设计模式,它允许我们定义横切关注点,如日志、事务管理、权限检查等,然后将这些关注点与核心业务逻辑解耦。这篇教程将详细讲解...
### Spring之AOP配置文件详解 #### 一、前言 在Java开发中,Spring框架因其强大的功能和灵活的配置而被广泛应用于企业级应用的开发。其中,面向切面编程(Aspect Oriented Programming,简称AOP)是Spring框架的...
该jar文件包含了Spring AOP的核心类和接口,如`org.springframework.aop.*`包下的`AspectJExpressionPointcut`、`MethodBeforeAdvice`、`AfterReturningAdvice`等。 3. spring-aspects-4.1.6.RELEASE.jar:这个jar...
Java Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许开发者在不修改原有代码的情况下,通过代理方式插入额外的功能,如日志、事务管理等。在这个主题中,我们将深入探讨Spring AOP如何处理事务管理...
Spring AOP通过代理模式实现了这一概念,可以在不修改原有代码的情况下,在运行时向目标对象添加额外的行为。在本实例中,Spring AOP可能被用来实现事务管理,确保数据库操作的一致性。 3. Spring Security:这是一...
**Spring AOP 配置实现详解** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的重要组成部分,它允许我们通过分离关注点来简化应用程序的开发。在传统的面向对象编程中,业务逻辑与日志记录...
总结一下,Spring基于AOP实现的事务管理通过TransactionProxyFactoryBean,结合声明式事务配置,能够提供一种高效且易于维护的事务解决方案。它允许我们在不修改业务逻辑的情况下,统一管理和控制事务,提升了代码的...