`

关于Spring事务代理类型转换问题($ProxyXX cannot be cast to 类型)(

阅读更多
二、解决方案
      后来在网上搜了一下,这样的问题很多,但是正真的解决方案并不多。参考http://mopishv0.blog.163.com/blog/static/54455932200911118572079写道
      spring的文档中这么写的:Spring AOP部分使用JDK动态代理或者CGLIB来为目标对象创建代理,如果被代理的目标对象实现了至少一个接口,则会使用JDK动态代理。所有该目标类型实现的接口都将被代理。若该目标对象没有实现任何接口,则创建一个CGLIB代理。使用beanNameAutoProxyCreator来进行事务代理的话,他的proxyTargetClass这个属性设置为false(默认是false),即使用JDK动态代理,如果你的service类没有实现接口的话,就会报类型转换错误。
    解决办法有
    1
、给service类添加一个接口iService,让service类实现它,则创建代理类时使用JDK动态代理就不会出现问题
    2、设置beanNameAutoProxyCreatorproxyTargetClass属性为true,意思是强制使用CGLIB代理,前提是你已经将CGLIB包加入到项目中
    推敲了很长时间,因为之前Spring事务用到的并不多,所以不是很了解。
    第一种方法修改UserDao类也实现IDAO接口,但是没有解决。照样报错....
    于是使用了第二种方案,修改了Spring事物配置信息,在原有的配置下加了一句配置如下:
<!-- 配置事务操作 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:advice id="txAdvice" transactionmanager="transactionManager">
    <tx:attributes>
        <tx:method name="add*" propagation="REQUIRED" />
        <tx:method name="insert*" propagation="REQUIRED" />
        <tx:method name="delete*" propagation="REQUIRED" />
        <tx:method name="update*" propagation="REQUIRED" />
        <tx:method name="find*" read-only="false" propagation="SUPPORTS" />
        <tx:method name="select*" read-only="false" propagation="SUPPORTS" />
    </tx:attributes>
</tx:advice>
<aop:config>
    <aop:pointcut id="point" expression="execution(* com.dao.*.*(..))" />
    <aop:advisor advice-ref="txAdvice" pointcut-ref="point" />
</aop:config>
<!-- 注意下面的配置 -->
<aop:aspectj-autoproxy proxy-target-class="true"/>
     注意:最后一行配置信息。
     这样之后就解决了,而且测试结果如下:
INFO [STDOUT] com.dao.UserDao@13ba812
INFO [STDOUT]
true
INFO [STDOUT]
true
INFO [STDOUT]
true
   又学了一招,很好很强大。。。接着要好好研究一下JDK动态代理和CGLIB代理(cglib.jarasm.jar)
分享到:
评论

相关推荐

    解决cannot be cast to javax.servlet.Filter 报错的问题

    cannot be cast to javax.servlet.Filter 报错, 原因servlet-api.jar冲突 使用maven开发web应用程序, 启动的时候报错: jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/...

    spring2.5基于注解例子程序

    Spring 2.5是Spring框架的一个重要版本,它引入了大量增强的功能,特别是对注解的支持,这使得在Java应用程序中实现依赖注入和面向切面编程(AOP)变得更加简单和直观。在这个基于注解的例子程序中,我们将深入探讨...

    Spring事务流程图

    4. **事务隔离**:Spring支持多种事务隔离级别,如READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ、SERIALIZABLE,不同的隔离级别能防止特定类型的并发问题。 5. **事务传播行为**:Spring提供了七种事务传播...

    Spring事务五种不同的代理配置

    在类上直接使用 @Transactional 注解,Spring 会创建基于类的代理,但是这种方式可能导致一些问题,例如:无法通过子类覆盖父类的方法来改变事务属性。 第五种方式:编程式事务管理 除了声明式事务管理,Spring 还...

    Spring事务管理Demo

    1. 配置事务管理器:在Spring的XML配置文件中,根据数据库类型(如JDBC、Hibernate、MyBatis等)配置相应的事务管理器。 2. 开启事务:使用`@Transactional`注解标记需要在事务中执行的方法。 3. 业务逻辑:在事务中...

    解决The type org.springframework.dao.support.DaoSupport cannot be resolved.bao报错

    在开发Spring框架相关的Java应用时,可能会遇到"The type org.springframework.dao.support.DaoSupport cannot be resolved"的错误提示。这个错误通常意味着编译环境无法找到`DaoSupport`类,这是Spring DAO模块中的...

    Spring事务管理失效原因汇总

    标题“Spring事务管理失效原因汇总”指出了本文的核心内容是分析在使用Spring框架进行事务管理时可能遇到的问题及其原因。描述部分进一步说明了事务失效的后果往往不明显,容易在测试环节被忽略,但在生产环境中出现...

    Spring事务传播类型.md

    Spring事务传播类型.md

    Spring事务与Java事务比较

    此外,Spring 还提供了事务回滚规则,允许基于异常类型或异常实例来决定是否回滚事务,增强了事务处理的灵活性。 Spring AOP 用于实现事务管理服务,它通过代理模式在方法调用前后插入事务处理代码,无需修改原有...

    在spring中获取代理对象代理的目标对象工具类

    在Spring框架中,AOP(面向切面编程)是一个核心特性,它允许开发者将横切关注点(如日志、事务管理等)与业务逻辑分离,实现代码的解耦和复用。然而,在某些场景下,我们可能需要访问被AOP代理的对象背后的真实目标...

    关于eclispe的“cannot connect to VM”

    标题中的“关于Eclipse的'cannot connect to VM'”指的是在使用Eclipse集成开发环境时,用户遇到的一个常见错误提示。这个错误通常发生在尝试启动Java虚拟机(JVM)时,Eclipse无法成功连接到它。这可能是由于多种原因...

    解决SpringDataJPA报错:org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null w

    问题描述 用SpringBoot + Spring Data JPA操作数据库 项目启动的时候 报了一个错 SpringBoot的版本是2.2.6.RELEASE org.springframework.beans.factory.BeanCreationException: Error creating bean with name '...

    第十五章 Spring 类型转换(Type Conversion)1

    同时,`BeanWrapper` 和数据绑定机制会利用 `ConversionService` 来处理属性赋值过程中的类型转换问题。 面试题精选可能会涉及以下几个方面: 1. Spring 类型转换系统的核心组件及其职责。 2. 如何实现自定义 `...

    Spring事务操作示例(四种方式)

    Spring事务操作示例(四种方式),包含完整代码和数据库文件(基于MySQL,在项目sql文件夹中),可运行,学习Spring事务详见博客:http://blog.csdn.net/daijin888888/article/details/51822257

    29 Spring MVC之类型转换Converter慕课专栏1

    在Spring MVC中,类型转换是将用户输入的数据(通常是字符串)转换为模型对象中的预期类型。在早期版本中,我们依赖于`PropertyEditor`来完成这个任务,它只能处理从`String`到其他类型的转换。然而,随着Spring的...

    Spring事务传播特性解析

    通过代码解析spring传播特性,包括 1、Propagation.REQUIRED 方法被调用时自动开启事务,在事务范围内使用则使用同一个事务,否则开启新事务。 2、Propagation.REQUIRES_NEW 无论何时自身都会开启事务 3、...

    Spring aop、jdbc和事务tx练习

    Spring JDBC的核心是`JdbcTemplate`和`SimpleJdbcTemplate`,它们提供了事务管理、参数绑定、异常转换等功能,避免了SQL注入等问题。 3. **Spring 事务管理(TX)** Spring TX模块提供了声明式和编程式的事务管理...

    Spring事务详解

    本文将深入探讨Spring事务管理的概念、类型、配置方式以及在实际开发中的应用。 首先,我们要理解什么是事务。事务是数据库操作的基本单元,它确保一组数据库操作要么全部成功,要么全部失败。事务有四大特性,即...

    spring 事务管理例子(TransactionProxyFactoryBean代理机制 和 tx/aop)

    在这个例子中,我们将聚焦于Spring的声明式事务管理,特别是通过`TransactionProxyFactoryBean`代理机制以及`@Transactional`注解与AOP(面向切面编程)的结合使用。 首先,`TransactionProxyFactoryBean`是Spring...

    Spring MVC学习(七)-------SpringMVC数据类型转换

    ### Spring MVC 数据类型转换详解 #### 一、背景与需求 在进行Web应用开发时,尤其是在使用Spring MVC框架的过程中,经常需要对用户提交的数据进行处理,包括但不限于数据类型转换、数据验证以及数据格式化等操作...

Global site tag (gtag.js) - Google Analytics