Spring @Bean(名称=“名称”)与@Bean @限定符(“名称”)

uyhoqukh  于 2022-12-10  发布在  Spring
关注(0)|答案(4)|浏览(207)

下面的2个bean声明之间有什么区别吗?

@Bean(name = "bean1")
 public A getA() {
     return new A();
 }

 @Bean
 @Qualifier("bean1")
 public A getA() {
     return new A();
 }

两者都可以使用@Qualifier自动连线

@Autowire
 public void test(@Qualifier("bean1") A a) {
     ...
 }
piok6c0g

piok6c0g1#

对于value(),您不必指定属性名称,如@Qualifier("bean1")。属性name()引用与value()相同的值,因为来自Spring的自定义注解@AliasFor(..),因此它们只是具有相同行为的不同名称。

mnemlml8

mnemlml82#

第一部分基本上是相同的,第二部分是当存在两个或多个相同类型的bean时所需要的。

p3rjfoxz

p3rjfoxz3#

您可以使用

@Autowire
 public void test(A bean1) {
     ...
 }

如果您使用

@Bean(name = "bean1")

不与

@Bean
@Qualifier("bean1")
8ftvxx2r

8ftvxx2r4#

可以有多个Bean具有相同的限定符名称,但Spring应用程序上下文中的Bean名称必须唯一

@Bean
    @Qualifier("qualifier1")
    Foo foo()
    {
        return new Foo();
    }

    @Bean
    @Qualifier("qualifier1")
    Bar bar()
    {
        return new Bar();
    }

上面的代码是可以接受的。但是在bean的情况下,它不是。

相关问题