我有这样的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 />
会解决它?
谢谢!
答案 0 :(得分:1)
通过添加<aop:scoped-proxy/>
我相信你告诉Spring使用智能对象代理而不仅仅是普通的JDK接口代理。基本上,您的代理对象由您的实际对象支持,因此当您传递它时,它看起来就像您的常规对象。这听起来像是使用AspectJ加载时编织和普通JDK代理之间的折衷。阅读等效注释here
编辑1:实际上看起来使用基于CGLib(AspectJ)的代理是默认选项。那可能解决了你的问题。