`

关于在Spring对事物控制为什么要基于接口?

阅读更多
在上一篇文章里说到,我们对UserManagerImpl类所有的方法进行了spring事物控制,而UserManagerImpl实现了UserManager接口,也许有人会说我的业务逻辑又不经常改变,为何还要多写这么一个接口,这不是很麻烦,接口的目的就是为了以后扩充业务逻辑而准备的,单改变业务逻辑的时候我重新实现一下这个接口,而不必要去动原有的实现类,而前期我业务逻辑很简单,不会变化,为了达到敏捷编程,前期设计我想尽量保持简单,这样不好吗?确实,前期尽量简单后期再进行重构,思想是不错,但由于spring的事物管理机制要么是基于AOP,或者CGLIB,要么是aspectJ,但这些技术都是基于代理技术实现,也就是说他们会拿其中某个类做为代理,然后返回一个代理对象,而当你的具有容器托管的业务逻辑类在没有接口的情况下,spring会把具体的实现类做为代理来实现事物管理,在这种情况下,当你在客户端代码里用:
UserManager userManager = (UserManager)ServiceLocator.getService("userManager");的时候会报java.lang.ClassCastException错误,因为这样得到对象不是UserManager的实现,而是spring返回一个形如:$Proxy这样的代理对象,所以你就不能对它进行操作,怎么办,无奈,你别无选择,你只能为UserManagerImpl类建立一个接口,然后实现这个接口,那么spring就会用UserManager这个接口来做为代理,而不是UserManagerImpl来做为代理了,所以这就是为什么有事物控制时一定要有接口的原因!
 
其时在hibernate里,如果要用spring的基于aspectJ的AOP技术来进行事物控制的话,你的pojo对象最好不要有基类,也就是说最好不要有以下的形式出现POJO类:
public class User extends Entity {
}
如果是这样的话,加载spring上下文的时候会出现Entity类找不到的情况,具体是什么原因,还在分析中,所以当你在基类的POJO对象时,最好不要用基于aspectJ的AOP技术来实现事物管理!
分享到:
评论
1 楼 ww5025419 2008-07-23  
这个问题困扰了一天,谢谢

相关推荐

    spring的5中事物配置 介绍spring的5中事物配置

    - 编程式事务管理允许在代码中直接控制事务的开始、提交、回滚等操作,使用`PlatformTransactionManager`接口和`TransactionDefinition`、`TransactionStatus`等类。这种方式虽然灵活,但侵入性较强,不推荐在业务...

    spring中事物配置

    对于声明式事务管理,Spring推荐使用基于接口的代理,因为这种方式更高效且更易于维护。 接下来,我们来一步步配置Spring中的声明式事务管理: 1. **配置事务管理器**:在`applicationContext.xml`中,你需要声明...

    spring-控制事物

    标题中的“spring-控制事务”指的是Spring框架中的事务管理功能,这是Spring的核心特性之一,用于在多层架构中实现数据库事务的一致性和可靠性。在Java企业级应用开发中,事务管理是至关重要的,确保数据操作的原子...

    spring-控制事物回滚

    "spring-控制事物回滚"这个主题主要涉及Spring如何在出现异常时自动或手动触发事务的回滚,以及如何配置和使用Spring的事务管理机制。我们将深入探讨Spring事务管理的原理、API使用以及在实际开发中的应用。 首先,...

    spring事物和rabbitMQ的例子

    Spring允许我们为每个数据源配置单独的事务管理器,这样可以独立控制各自的事务行为,如隔离级别、传播行为等。 接着,我们来看Spring的多事务处理。在有多个数据源的情况下,Spring支持同时管理多个事务。这意味着...

    spring-tx事物源码

    在Spring框架中,事务管理是核心功能之一,它提供了对应用程序数据访问层的事务支持。Spring的事务管理机制包括编程式事务管理和声明式事务管理,这两种方式都基于`spring-tx`模块。在这个源码中,我们可以深入理解...

    spring.net 声明式事物管理小示例

    Spring.NET 是一个基于 .NET Framework 的轻量级应用程序框架,其设计灵感来源于 Java 平台上的 Spring Framework。在 .NET 开发中,Spring.NET 提供了丰富的功能,包括依赖注入、面向方面编程(AOP)以及事务管理。...

    spring事物管理

    在Java应用中,尤其是在企业级开发中,Spring提供了强大的事务管理能力,使得开发者可以轻松地在应用程序中集成事务控制。 以下是Spring声明式事务管理的五种方式: 1. **基于XML的事务配置**: 这是最传统的配置...

    事物简单总结(偏向Spring事物)

    Spring事务管理的配置通常在XML配置文件中完成,如`<tx:annotation-driven>`元素启用基于注解的事务管理,并指定事务管理器。另外,Spring还支持Java配置方式,通过@Configuration和@EnableTransactionManagement...

    spring 事物底层原理分析1

    综上所述,Spring 事务管理是基于数据库事务的抽象,提供了声明式和编程式的事务控制方式,以及灵活的事务传播机制,为开发者提供了强大且易用的事务管理工具。在实际项目中,根据业务场景合理配置事务隔离级别和...

    spring事物管理配置的5种方式

    主要有两种代理方式:基于接口的JDK动态代理和基于类的CGLIB代理。 接下来,我们将详细探讨五种事务管理配置方式: ### 第一种:每个Bean都有一个代理 在这种方式中,每个需要事务管理的Bean都会被一个事务代理...

    spirn的事物配置详解与webservices案例

    1. Spring事物配置详解: 在Spring框架中,事务管理是核心功能之一,它允许开发者以声明式或编程式的方式来管理事务。声明式事务管理通过在XML配置文件或注解中定义事务边界,使得事务处理更加简洁。例如,可以使用...

    Spring Boot数据库事务控制.zip

    在Spring Boot中,数据库事务控制是实现业务逻辑一致性的重要手段。本资料主要围绕Spring Boot如何进行数据库事务管理进行深入探讨。 首先,我们需要了解什么是事务。事务是数据库操作的基本单位,它保证了一组...

    第八节-spring-事物源码解析1

    - **声明式事务管理**:基于AOP(面向切面编程),通过在方法或类上添加@Transactional注解来声明事务属性,由Spring容器在运行时自动处理事务开始、提交或回滚。 - **编程式事务管理**:在代码中显式调用...

    4.Spring中的JdbcTemplate,Spring中的的事务,

    该接口提供了关于当前事务的状态信息,如是否已提交、是否已回滚等。 #### 基于XML声明式事务控制 通过配置文件来定义事务规则。例如,在转账案例中,可以配置如下: ```xml (* ...

    spring事物 支持

    综上所述,Spring的事务管理是其强大功能的重要组成部分,无论是编程式还是声明式,都能为开发者提供高效、灵活的事务控制手段,保证数据的一致性。通过合理的配置和使用,可以显著提高应用程序的稳定性和可靠性。

    spring自定义标签例子

    这些标签是基于Java的`org.springframework.beans.factory.xml.BeanDefinitionParser`接口实现的。自定义标签的实现过程包括以下几个关键步骤: 1. **定义解析器**:首先,你需要创建一个类实现`...

    Spring JDBC与事务管理源代码

    1、掌握Spring JDBC的配置; 2、掌握JdbcTemplae类中增删改查方法的使用;...3、了解Spring事务管理的3个核心接口; 4、了解Spring事务管理的两种方式; 5、掌握基于XML和Annotation的声明式事务管理的使用。

    Spring中的@Transactional事物回滚实例源码

    在这个例子中,`createUser`方法被标记为事务性的,如果在方法内部抛出未捕获的异常,Spring会自动回滚事务,确保数据一致性。 Spring事务管理的工作流程大致如下: 1. **AOP代理**:Spring使用AOP(面向切面编程)...

Global site tag (gtag.js) - Google Analytics