gpt4 book ai didi

spring - bean 使用 Spring 实现某些接口(interface)时无法 Autowiring 字段

转载 作者:行者123 更新时间:2023-12-04 16:40:04 26 4
gpt4 key购买 nike

我在我的 Java 应用程序中使用 Spring,直到现在所有 @Autowired 注释都有效。

简化的例子是:

  @Component
public class MyBean implements MyInterface {
...
}

@Component
public class MyOtherBean {
@Autowired
private MyBean myBean;
...
}

一旦我尝试启动应用程序,我得到:
java.lang.IllegalArgumentException: Can not set MyBean field MyOtherBean.myBean to $ProxyXX
  • 该接口(interface)只包含两个公共(public)的简单方法,类实现了它们。
  • 这两个类都是公共(public)的,并且具有公共(public)的默认构造函数。 (我什至尝试在测试中实例化它们。
  • 一旦我删除 implements部分,一切正常。

  • 接口(interface)的实现可能有什么问题?什么是 $ProxyXX ?

    最佳答案

    我怀疑问题在于 Spring 正在注入(inject)一个实现 MyInterface 的 AOP 代理。 - 可能出于事务管理或缓存的目的。是MyBean中的任何一个吗?的方法注释@Transactional或用任何其他注释注释?

    理想情况下,您可能希望通过其接口(interface)类型引用 MyBean - 这应该可以解决问题。

    @Component
    public class MyOtherBean {
    @Autowired
    private MyInterface myBean;
    ...
    }

    如果你有多个 bean 实现 MyInterface那么你总是按名称限定你的bean。
    @Component
    public class MyOtherBean {
    @Autowired
    @Qualifier("myBean")
    private MyInterface myBean;
    ...
    }

    关于spring - bean 使用 Spring 实现某些接口(interface)时无法 Autowiring 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16741128/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com