java.lang.IllegalArgumentException: Cannot convert value of type [$Proxy0 implementing (解决)

Caused by: java.lang.IllegalArgumentException: Cannot convert value of type [$Proxy0 implementing com.mysoft.applications.database.interfaces.MyInterface,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised] to required type [ibatis.ibator.services.TestService] for property 'service': 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.convertForProperty(BeanWrapperImpl.java:386)
    ... 42 more

 

如果在Spring配置文件中配置的事务是通过AOP标签实现的,那就在<aop:config />中增加proxy-target-class="true"属性。就异常显示的信息可以看到,Spring在转换时,主要是将代理类转换成接口,反而不能转换成实际类。

如果是通过bean方式增加事务控制,则在配置文件中增加

<!--     <bean  -->
<!--         class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">  -->
<!--          <property name="proxyTargetClass">  -->
<!--            <value>true</value>  -->
<!--        </property>        -->
<!--      </bean>  -->

去掉上面的注释

上面这段配置信息只是一部分。其他的各位再摸索吧!

这里有个兄弟也是这样的问题,他的是bean控制事务的http://longterm.javaeye.com/blog/394395

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
`java.lang.IllegalArgumentException: Unknown return value type: java.lang.Integer` 这个异常通常发生在尝试将一个不是 `Integer` 类型的对象当作 `Integer` 返回时。这种情况常见于接口、泛型等场景。 ### 异常解释 这个异常表示 Java 的运行环境无法识别返回值的数据类型。在 Java 中,数据类型必须明确指定,而且对于某些上下文,如方法声明或参数传递,返回值或参数的实际类型需要被系统精确理解。 ### 示例场景 假设你有一个接口定义: ```java public interface MyInterface { Integer myMethod(); } ``` 然后在某个类中实现了该接口,并尝试返回了一个非 `Integer` 类型的对象: ```java import java.util.List; public class MyClass implements MyInterface { @Override public Object myMethod() { List<Integer> numbers = new ArrayList<>(); // 假设这里添加了一些整数 return numbers; // 此处返回的是List<Integer>, 而不是Integer } } ``` 在这个例子中,当调用 `MyClass` 实现的 `myMethod()` 方法时,由于它返回了 `List<Integer>` 类型而不是 `Integer` 类型,因此会引发 `IllegalArgumentException: Unknown return value type: java.lang.Integer` 异常。 ### 解决方案 要解决这个问题,你需要确保返回的类型与方法声明以及调用期望的一致: ```java @Override public Integer myMethod() { List<Integer> numbers = new ArrayList<>(); // 假设这里添加了一些整数 int sum = numbers.stream().mapToInt(i -> i).sum(); // 将列表转换为单个Integer类型的值作为结果 return sum; } ``` 在这个修改后的版本中,我们计算了列表中所有整数的总和并将其返回,这使得 `myMethod()` 方法可以正常返回一个 `Integer` 类型的结果,避免了异常的发生。 ### 相关问题: 1. 在什么情况下可能会抛出 `IllegalArgumentException`? 2. 怎样检查和处理 Java 程序中的类型错误? 3. 如何有效地利用泛型避免此类异常? --- 这样的解答涵盖了基本原理、示例及解决方案,并提出了进一步深入学习的问题,旨在提供全面的理解。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值