【发布时间】:2011-12-12 13:08:29
【问题描述】:
我想问一下异常的根本原因:
Caused by: java.lang.ClassCastException: java.lang.Class cannot be cast to
java.lang.reflect.ParameterizedType
当我们让 Spring 为类生成代理(即在事务管理器上设置 proxy-target-class="true")时,会在 Spring 中发生这种情况:
<tx:annotation-driven transaction-manager="transactionManager"
proxy-target-class="true"/>
当要代理的类是参数化类时,即
public class SomeDAOImpl<SomeEntity> implements SomeDAO ...
例如,完整的故事可以在这个问题中阅读:Abstract DAO pattern and Spring's "Proxy cannot be cast to ..." problem!
问题:为什么Spring不能代理这个类?是因为它使用旧的代码生成库吗?因为类型擦除?如果SomeDAOImpl 不是泛型类,它会成功(我检查过)。
请不要这样回答:“你应该代理接口,而不是类”。我知道。
【问题讨论】:
-
这个问题也可能是相关的——stackoverflow.com/questions/3969874/…
-
@DonRoby 我希望它这么简单......我确实有一个公共的非参数构造函数。 CGLIB 的解释:此问题的常见原因包括使用最终类或不可见类,这里也不是问题。