java - Spring BeanNotOfRequiredTypeException

标签 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 />解决了吗?

谢谢!

最佳答案

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

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

关于java - Spring BeanNotOfRequiredTypeException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22681552/

相关文章:

java - 是什么导致了 java.lang.ArrayIndexOutOfBoundsException 以及如何防止它?

java - Spring 两种不同的应用上下文——属性占位符冲突

java - 没有定义类型的唯一 bean : expected single matching bean but found 2

java - 我可以在 aop java 中声明围绕建议本身的建议吗?

java - 使用 Spring Cloud Sleuth 的 Spring AOP 记录器跟踪 ID?

java - 如何更新 Java Gui 中的变量?

java - jackson 用+和t字符反序列化日期字符串

java - WriteListener (servlet 3.1) 语义

java - Spring Security - UserRole 或 UserAuthentication

java - Spring AOP 和注释在方法执行之前检查参数