当前位置: 首页 > 知识库问答 >
问题:

从Spring xml配置迁移到带有bean引用的@Configuration(servlet 3.0)会导致BeanNotOf在需要的类型异常

唐修明
2023-03-14

我正在使用相应的@Configuration注释从基于xml的Spring配置迁移到基于“类”的配置。

我遇到了以下问题:我想创建一个新的bean,它引用了另一个(服务)bean。因此,我自动连接了这个类,以便在bean创建期间设置这个引用。我的配置类如下所示:

@Configuration
@ComponentScan(basePackages = {"com.akme"})
public class ApplicationContext {

    @Resource
    private StorageManagerBean storageManagerBean;

    @Bean(name = "/storageManager")
    public HessianServiceExporter storageManager() {
        HessianServiceExporter hessianServiceExporter = new HessianServiceExporter();
        hessianServiceExporter.setServiceInterface(StorageManager.class);
        hessianServiceExporter.setService(storageManagerBean);
        return hessianServiceExporter;
    }
}

但这不起作用,因为会在启动时导致BeanNotOfRequiredTypeException异常。

Bean named 'storageManagerBean' must be of type [com.akme.StorageManagerBean], but was actually of type [com.sun.proxy.$Proxy20]

StorageManagerBean用@Service注释进行了注释。基于xml的配置如预期的那样工作:

<bean name="/storageManager" class="org.springframework.remoting.caucho.HessianServiceExporter">
    <property name="service" ref="storageManagerBean"/>
    <property name="serviceInterface" value="com.akme.StorageManager"/>
</bean>

所以,我不知道我做错了什么,为什么spring试图自动连接代理类。

我很感激你的帮助。

最好的问候,丹尼尔

共有1个答案

夏侯腾
2023-03-14

使用Spring Remoting时,它将为远程bean创建代理。这是为了隐藏所用技术的复杂性。因此,在您的情况下,它将构建一个实现StorageManager接口的代理,并且因此它将创建一个实现该接口的代理。

现在不仅适用于Spring远程处理,而且基本上也适用于SpringAOP,AOP与代理一起应用(如参考指南中所述)。因此,我怀疑您的StorageManagerBean周围有事务,默认情况下,这会导致JDK动态代理。这个代理也是基于接口的。

简而言之,注入一个< code>StoreManager实例,而不是< code>StoreManagerBean实例。

 类似资料:
  • 在另一个项目中实现之前,我一直试图按照这里的教程设置演示,以帮助我理解本地机器上的SSO。我遇到了一个使我陷入困境的问题。我收到错误通知我添加一个bean。请让我知道我缺少了什么代码。我无法使程序运行。 文件系统树 authApplication.java 应用程序.属性 给出错误(不是运行的全部控制台输出,但这是错误)

  • 问题内容: 每当启动应用程序spring启动时,我都会收到以下错误。 申请开始失败 描述: com.base.model.AbstractDao中的现场会话需要找不到“ org.hibernate.SessionFactory”类型的Bean。 行动: 考虑在配置中定义类型为“ org.hibernate.SessionFactory”的bean。 我添加了我的应用程序的实现: POM.xml 应

  • 我已经提到了为什么在Spring Boot期间找不到bean?和“字段需要找不到类型的bean。”使用mongodb的spring restful API出错 CustomerService只是一个接口,充当CustomerController和CustomerService实施之间的中间人,它实际上在CustomerRepository的帮助下对数据库执行操作。 我正在尝试从MYSQL数据库中检

  • 我是一名spring boot学习者,所以我一直在尝试创建一些基本的spring boot应用程序。我试图运行开发的应用程序时出错。 我的错误是[[https://i.stack.imgur.com/oyQDi.png][1]][1] java: ItemDetails.java:[软件包名称:io.ajithan.springbootstarter.model] ItemResponse.jav

  • 结构没有问题。spring boot可以扫描UserMapper,但不能扫描UserService。我试着给我的UserService@Mapper组件,然后它就可以被扫描了。但我不知道如何使用其他方法进行扫描。我尝试了@服务,但不起作用。

  • 我搜索了很多stackoverflow,但没有找到解决问题的方法。当将SpringBoot应用程序作为WAR文件部署到Tomcat 8时,我发现以下错误,在本地它确实可以正常工作 有一个接口 和两个实现类 和二等舱 还有Rest服务 所以我不明白Tomcat怎么找不到像boolean这样的原始数据类型,也不明白为什么我在本地运行它时它能工作。 任何帮助都将不胜感激 问候马蒂亚斯