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

当bean使用Spring实现某些接口时,无法自动连接字段

蓝苗宣
2023-03-14

我在Java应用程序中使用Spring,所有@Autowired注释到目前为止都在工作。

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

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

一旦我尝试启动应用程序,我得到:

java.lang.IllegalArgumentException:无法将 MyBean 字段 MyOtherBean.myBean 设置为 $ProxyXX

  1. 该接口仅包含两个公共简单方法,该类实现了它们
  2. 这两个类都是公共的,并且都有公共的默认构造函数。(我甚至尝试在测试中实例化它们。
  3. 删除implements部分后,一切正常

接口的实现会有什么问题?什么是< code>$ProxyXX?

共有2个答案

锺离韬
2023-03-14

默认情况下,当bean实现一个接口时,Spring使用Java动态代理来实现AOP。解决这个问题最简单、最干净的方法是在接口上编写程序,并注入接口而不是具体的类:

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

关于如何强制spring始终使用CGLib,请参见http://static . springsource . org/Spring/docs/3.2 . x/Spring-framework-reference/html single/# AOP-proxing。

房冥夜
2023-03-14

我怀疑问题在于Spring注入了一个实现< code>MyInterface的AOP代理——可能是为了事务管理或缓存的目的。是否有任何< code>MyBean的方法被注释了< code>@Transactional或用任何其他注释进行了注释?

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

如果您有多个Bean实现MyInterface,那么您总是通过名称来限定您的Bean。

@Component
public class MyOtherBean {
    @Autowired
    @Qualifier("myBean")
    private MyInterface myBean;
    ...
}
 类似资料:
  • 有没有可能让一个Spring Bean实现两个接口,并能够使用任何一个接口自动连接Bean? 一个实现两个服务的类 我正在获取: 原因:org.springframework.beans.factory.NoSuchBeanDefinitionException:找不到依赖项[ServiceB]的[ServiceB]类型的合格bean:需要至少有一个bean可以作为此依赖项的自动候选项。依赖项批注

  • 我从spring-boot开始,我有一些配置问题。我无法自动操作某些服务。我得到一个BeanCreationException。 Hier是我自动执行服务的控制器: 控制台的错误: 当我从compenentscan中删除两个控制器时,我不会出现这个错误,但我需要扫描这些控制器来访问endpoint。

  • 问题内容: 背景: 我有一个Spring 2.5 / Java / Tomcat应用程序。下面的bean在整个应用程序中的许多地方都使用过 以下是新的bean: 第一个bean的配置如下(包含了软件包中的所有bean) 第二个(新)bean是单独配置的 启动服务器时,这(当然)会导致异常: 从试图像这样自动装配bean的类中 因为有两个bean实现相同的接口。 问题: 是否可以配置Bean,以便

  • 我有一个spring 2.5/Java/Tomcat应用程序。下面有一个bean,在整个应用程序的许多地方都使用了这个bean 和以下新bean: 第一个bean是这样配置的(包中的所有bean都包含在内) 第二个(新的)bean是单独配置的 这会导致(当然)启动服务器时出现异常: 嵌套异常为org.springframework.beans.factory.NoSuchBeanDefinitio

  • 我是Spring的新手。我正面临Spring-Boot的问题。我正在尝试将外部配置文件中的字段自动装配到自动装配的bean中。我有以下类 应用程序。Java语言 AppConfig。Java语言 服务接口 服务1 我无法在App类的postconstruct方法中显示服务名称变量。我这样做对吗?

  • 大家好,我是Spring安保和jwt的新人。我正在我的spring boot项目中实现Jwt以确保用户登录安全,我使用的是spring boot 2.1.5,我不太了解spring boot 2中的新bean限制 @自动安装用户详细信息服务jwtUserDemailsService 谚语。。。无法自动连线。用户详细信息服务类型的 bean 不止一个。 谁能解释一下这里发生了什么问题,为什么我不能自