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

spring:两个bean实现一个接口,其中一个为@primary-autowiring创建两个bean

阴飞星
2023-03-14

一个接口:BeanMapperUtil

两个实现bean:

  1. orikaBeanMapper-单件bean并标记为@primary
  2. DirectBeanMapper-原型Bean

在Manager类中:

@Autowired
BeanMapperUtil mapper;

观察:spring创建了orikaBeanMapperdirectbeanMapper,然后创建了autowiresorikaBeanMapper

预期:由于orikaBeanMapper已经标记为@primary,spring应该只创建这个bean并自动连接它。spring不需要创建DirectBeanMapper实例。这对性能/功能没有影响,但这看起来像是浪费的实例创建,只会被丢弃。

共有2个答案

颛孙喜
2023-03-14

@primary在创建了所有匹配bean之后作为过滤器工作。它的设计并不是为了阻止查找和创建其他的、非主要的、匹配的bean。

当spring尝试自动连接BeanMapperUtil时,它将找到两个匹配项,OrikaBeanMapperDirectBeanMapper,并且将创建这两个匹配项。此时,@primary开始发挥作用。spring将选择带有@primary注释的bean进行注入。

朱兴安
2023-03-14

当您的应用程序启动时,spring容器创建注册在其中的所有bean(包括原型bean)的实例,并将该bean存储在BeanFactory中。

因此,所有bean都被一次创建,并且只有BeanMapperUtil被注入,因为它被用于自动连接。

 类似资料:
  • 我是个新手,所以请不要介意我的问题是愚蠢的 我有一个实现两个接口的类 我正在上下文类中定义bean对象,如下所示:

  • 有没有可能让一个Spring Bean实现两个接口,并能够使用任何一个接口自动连接Bean? 一个实现两个服务的类 我正在获取: 原因:org.springframework.beans.factory.NoSuchBeanDefinitionException:找不到依赖项[ServiceB]的[ServiceB]类型的合格bean:需要至少有一个bean可以作为此依赖项的自动候选项。依赖项批注

  • 假设我需要依赖一个Spring bean的几个实现。我有一个接口和两个实现:和。 下面的注入将使用哪个实现?

  • 我在WebDriver中的测试有问题。 在第一个包我有2类(页)主页,登录页。 在secound包中,我有test-goToLiginPageTest和LoginTest。 在Gotoligini页面,我检查,我在主页上,并进入登录页面。 在LoginTest中,我检查我是否在登录页面上,并登录。 但来自goToLiginPageTest的两个测试通过,但来自LoginTest的测试失败。 我不确

  • 我有两个spring bean类实现相同的接口。 你能给我一个建议吗。

  • 我基本上想要一个EC2,一个接口在公共子网,一个在私有子网。我应该能够通过公共接口从外界SSH,私有网络将用于与私有网络中的数据库通信。 在地形上。。。 我在该 VPC 中创建了一个 VPC,两个子网(一个公共子网,一个私有子网)。 创建了一个互联网网关,即 VPC 中的路由表,其路由为 0.0.0.0/0 至 IGW 已在与公有子网和路由表之间创建路由关联。 已创建一个 EC2 实例,其中一个接