下面的2个bean声明之间有什么区别吗?
@Bean(name = "bean1") public A getA() { return new A(); } @Bean @Qualifier("bean1") public A getA() { return new A(); }
两者都可以使用@Qualifier自动连线
@Qualifier
@Autowire public void test(@Qualifier("bean1") A a) { ... }
piok6c0g1#
对于value(),您不必指定属性名称,如@Qualifier("bean1")。属性name()引用与value()相同的值,因为来自Spring的自定义注解@AliasFor(..),因此它们只是具有相同行为的不同名称。
value()
@Qualifier("bean1")
name()
@AliasFor(..)
mnemlml82#
第一部分基本上是相同的,第二部分是当存在两个或多个相同类型的bean时所需要的。
p3rjfoxz3#
您可以使用
@Autowire public void test(A bean1) { ... }
如果您使用
@Bean(name = "bean1")
不与
@Bean @Qualifier("bean1")
8ftvxx2r4#
可以有多个Bean具有相同的限定符名称,但Spring应用程序上下文中的Bean名称必须唯一
@Bean @Qualifier("qualifier1") Foo foo() { return new Foo(); } @Bean @Qualifier("qualifier1") Bar bar() { return new Bar(); }
上面的代码是可以接受的。但是在bean的情况下,它不是。
4条答案
按热度按时间piok6c0g1#
对于
value()
,您不必指定属性名称,如@Qualifier("bean1")
。属性name()
引用与value()
相同的值,因为来自Spring的自定义注解@AliasFor(..)
,因此它们只是具有相同行为的不同名称。mnemlml82#
第一部分基本上是相同的,第二部分是当存在两个或多个相同类型的bean时所需要的。
p3rjfoxz3#
您可以使用
如果您使用
不与
8ftvxx2r4#
可以有多个Bean具有相同的限定符名称,但Spring应用程序上下文中的Bean名称必须唯一
上面的代码是可以接受的。但是在bean的情况下,它不是。