我有这样的 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 />
解决了吗?
谢谢!
最佳答案
通过添加<aop:scoped-proxy/>
我相信您是在告诉 Spring 使用智能对象代理而不仅仅是普通的 JDK 接口(interface)代理。基本上,您的代理对象由实际对象支持,因此当您传递它时,它看起来就像您的常规对象一样。这听起来像是使用 AspectJ 加载时编织和普通 JDK 代理之间的折衷方案。阅读等效注释的作用 here
编辑1:实际上看起来使用基于CGLib(AspectJ)的代理是默认选项。这可能就是解决您问题的方法。
关于java - Spring BeanNotOfRequiredTypeException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22681552/