53

在 Springs 最新版本中,我们可以使用注解 as 自动装配 bean @Autowired。这将使用 bean 的类型(或构造函数,如果应用于它)自动装配 bean。有什么方法可以使用@Autowired基于我们在 Spring 的 XML 文件中没有注释的 bean 名称的注释作为autowire="byName"

4

5 回答 5

105

您可以使用:

@Autowired
@Qualifier("beanname")

根据@Qualifier javadoc

自动装配时,可以在字段或参数上使用此注释作为候选 bean 的限定符

于 2012-08-06T15:33:10.050 回答
50

您可以使用 JSR-250@Resource进行按名称 bean 自动装配,除非您需要构造函数注入或多参数方法注入。

从文档:

如果您打算通过名称来表达注解驱动的注入,请不要主要使用@Autowired,即使在技术上能够通过@Qualifier 值引用bean 名称。相反,使用 JSR-250 @Resource 注释,它在语义上定义为通过其唯一名称标识特定目标组件,声明的类型与匹配过程无关。

于 2012-08-06T15:35:44.587 回答
3

如果您想定义将在 DI 容器中注册的 bean 的名称,您可以在注释本身中传递名称,例如@Service (“employeeManager”)。

然后使用下面的代码,您可以按名称启用自动装配

@Autowired
@Qualifier("employeeManager")
private EmployeeManagerService employeeManagerService;
于 2016-07-07T07:00:15.453 回答
2

我正在使用 bean 名称代理,它按名称弄乱了自动装配。@Resource 没有这个问题,因为它不关心类型。所以现在我知道 Spring 开发人员推荐这一建议的一个原因 :-) 仅供参考

于 2013-03-18T14:44:22.233 回答
2

在 bean 的 java 类定义中使用 @Component("beanname")

然后在自动装配时使用 JSR 330

@Inject @Named(Value="beanname")

于 2017-10-16T08:29:45.123 回答