spring 事务异常Failed to convert property value of type [$Proxy12] to required type
<?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.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="com.mysql.jdbc.Driver">
</property>
<!-- 现场字符集:?useUnicode=true&characterEncoding=gb2312
数据库如果是: utf-8 不需要转换
-->
<property name="url"
value="jdbc:mysql://localhost:3306/jssms?useUnicode=true&characterEncoding=gb2312">
</property>
<property name="username" value="root"></property>
<property name="password" value="zmq"></property>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource">
<ref bean="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="DataAccessException"/>
<tx:method name="*" propagation="REQUIRED" rollback-for="DataAccessException"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="daoPointCut" expression="execution(* com.chemmade.adminbg.dao.impl..*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="daoPointCut"/>
</aop:config>
</beans>
。。。。
<bean scope="prototype" id="adminDAO" class="com.chemmade.adminbg.dao.impl.AdminDAOImpl">
<property name="jdbcTemplate">
<ref bean="jdbcTemplate" />
</property>
</bean>
<bean scope="prototype" id="AdminLoginAction" class="com.chemmade.adminbg.action.AdminLoginAction">
<property name="adminDAO">
<ref local="adminDAO" />
</property>
</bean>
加入spring事务报如下异常:
严重: Servlet.service() for servlet default threw exception
org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessException details (1) are:
PropertyAccessException 1:
org.springframework.beans.TypeMismatchException: Failed to convert
property value of type [$Proxy12] to required type
[com.chemmade.adminbg.dao.impl.AdminDAOImpl] for property 'adminDAO';
nested exception is java.lang.IllegalArgumentException: Cannot convert
value of type [$Proxy12] to required type
[com.chemmade.adminbg.dao.impl.AdminDAOImpl] for property 'adminDAO': no
matching editors or conversion strategy found
Caused by: java.lang.IllegalArgumentException: Cannot convert value of
type [$Proxy12] to required type
[com.chemmade.adminbg.dao.impl.AdminDAOImpl] for property 'adminDAO': no
matching editors or conversion strategy found
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:231)
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:138)
at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:815)
at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:648)
......
错误原因:
配置事务为adminDAOImpl生成了代理,所以在下面action中注入的将是代理对象(提示信息中的 [$Proxy12] )而不是原来的adminDAOImpl对象,这就产生了上面错误信息。
解决办法:
使用cgilib来实现AOP,定义proxy-target-class="true"
;proxy-target-class属性值决定是基于接口的还是基于类的代理被创建。如果proxy-target-class
属性值被设置为true,那么基于类的代理被创建,产生的代理对象会instanceof原来的类。
<aop:config proxy-target-class="true">
<aop:pointcut id="daoPointCut" expression="execution(* com.chemmade.adminbg.dao.impl..*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="daoPointCut"/>
</aop:config>
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/reandyner/archive/2010/03/25/5416696.aspx
分享到:
相关推荐
Java动态代理内存中生成的$Proxy0类
Java中的`java.lang.NoSuchMethodException`异常通常表明在运行时尝试调用一个不存在的方法。这个错误通常发生在动态代理、反射或者其他需要在运行时查找或调用特定方法的场景。在这个特定的问题中,错误提示是`java...
Spring AOP通过代理模式为我们提供了在运行时向目标对象添加拦截器或切面的能力,这在进行日志记录、性能监控、事务管理等场景下非常实用。 首先,让我们了解代理模式的基本概念。代理模式是一种设计模式,它为一个...
Spring 事务管理是其核心特性之一,用于确保在执行数据库操作时的一致性和可靠性。它提供了五种不同的配置方式来适应不同的应用场景。以下是对这些配置方式的详细解释: 1. **基于代理的事务管理(Proxy-based ...
1.Connect to the ESX host using SSH. For more information, see Connecting to an ESX host using an SSH client (1019852). 2.Take a backup of the /etc/vmware/config file using this command: cp /etc/...
在`tx`和`aop`的配合下,Spring会通过AOP代理拦截带有`@Transactional`的方法调用,根据注解中的配置启动一个新的事务,执行方法,如果方法正常结束则提交事务,遇到异常则回滚事务。 在基于Struts1.2和Spring2.0的...
系统环境:CentOS Linux release 7.6.1810 (Core) 起因:npm构建时报错 ... fatal: unable to access 'https://github.com/nhn/raphael.git/': Failed connect to github.com:443; Connection timed out npm
php-proxy 是基于 PHP,Symfony 和 cURL 的代理脚本,这个库借鉴了 Glype,Jenssegers proxy 和 Guzzle 的经验。...// send the response back to the client $response->send(); 标签:phpproxy
《Spring事务管理详解》 在Java企业级应用开发中,数据一致性是至关重要的,而Spring框架的事务管理机制就是为了解决这个问题。本教程将深入探讨Spring中的事务管理,包括其核心概念、配置方式以及实战应用。 首先...
确保事务方法在Spring容器内,或者使用`@EnableAspectJAutoProxy(proxyTargetClass = true)`开启CGLIB代理。 2. 异常处理:只有当方法抛出`RuntimeException`或其子类时,Spring才会默认回滚事务。如果抛出的是非...
"ProXY 4 To 6" 是一个专门用于将IPv4网络连接转换为IPv6网络连接的软件工具。这个标题暗示了它可能是解决IPv4地址空间耗尽问题的一种解决方案,使得IPv4设备能够访问IPv6网络资源。 **描述分析:** 描述中的“Ipv4...
本文将深入探讨如何使用Spring的IOC和DI特性,结合动态代理(Dynamic Proxy)来实现一种类似AOP(面向切面编程)的功能,以达到在不修改原有代码的情况下增强或拦截方法调用的目的。 **一、Spring IOC(控制反转)*...
在本课程中,我们将深入探讨Spring事务传播原理和数据库事务操作的基本概念,这对于有Spring开发经验的人员来说,是进一步深化事务控制理解的关键。我们还将触及分布式事务的初步知识,帮助开发者更好地掌握基于...
在本示例中,"Spring示例_Printer_Spring_AOP_Spring_Proxy" 主要关注的是Spring框架中的核心概念,特别是AOP(面向切面编程)和代理模式的应用。让我们深入探讨这些知识点。 首先,Spring框架是Java开发中最常用的...
本文将深入解析Spring AOP如何获取代理对象,即Proxy。 首先,我们需要理解AOP的核心概念: 1. **Advice**:通知,是切面实际执行的操作。在Spring中,Advice可以是Before、AfterReturning、AfterThrowing以及...
此外,开启日志记录,监控代理服务的使用情况,以便及时发现异常行为。 总结起来,ngx_http_proxy_connect_module是一个扩展Nginx功能的工具,它使得Nginx能够处理HTTP代理的CONNECT方法,从而实现透明代理服务。在...
Spring 源代码分析系列涵盖了多个关键模块,包括事务处理、IoC容器、JDBC、MVC、AOP以及与Hibernate和Acegi安全框架的集成。以下是对这些知识点的详细阐述: 1. **Spring 事务处理**:Spring 提供了声明式事务管理...
《ProXY4To6:IPv4到IPv6的过渡技术详解》 在当前的互联网环境中,IPv4地址的枯竭已经成为一个不容忽视的问题。为了解决这个问题并推进下一代互联网IPv6的发展,各种过渡技术应运而生。其中,ProXY4To6是一个重要的...