Spring BeanNotOfRequiredTypeException

时间:2014-03-27 08:06:48

标签: java spring spring-aop

我有这样的bean:

<bean id="myBean" class="com.mypackage.MyClass" scope="session">
</bean>

这是类声明:

MyClass extends MySuperClass implements MyInterface<A>


MySuperClass extends GenericClass<A>

后来我尝试这样做:

 applicationContext.getBean("myBean", GenericClass.class);

我收到了这个错误:

org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'myBean' must be of type [com.mypackage.GenericClass], but was actually of type [com.sun.proxy.$Proxy118]

我通过添加:

解决了这个问题
<aop:scoped-proxy />

在我的bean声明中但我喜欢理解我在做什么,在这种情况下我不喜欢。

你能解释一下我为什么会遇到这个例外,以及为什么添加<aop:scoped-proxy />会解决它?

谢谢!

1 个答案:

答案 0 :(得分:1)

通过添加<aop:scoped-proxy/>我相信你告诉Spring使用智能对象代理而不仅仅是普通的JDK接口代理。基本上,您的代理对象由您的实际对象支持,因此当您传递它时,它看起来就像您的常规对象。这听起来像是使用AspectJ加载时编织和普通JDK代理之间的折衷。阅读等效注释here

的内容

编辑1:实际上看起来使用基于CGLib(AspectJ)的代理是默认选项。那可能解决了你的问题。