【问题标题】:Define default implementation for injection in Spring?在 Spring 中定义注入的默认实现?
【发布时间】:2014-02-21 03:01:21
【问题描述】:

我有一个由其他类扩展的基类。因此,我必须提供能够注入特定实例的限定符。

我想知道我是否可以将这些类中的任何一个(例如最上层的类)标记为默认类,如果@Autowired 上没有提供限定符,则会被选中?

@Service
//@Qualifier("Parent")
class ParentRunner;

@Service
@Qualifier("Child")
class ChildRunner extends ParentRunner;

以下至少不起作用:

@Autowired
//@Qualifier("Parent")
private ParentRunner runner;

【问题讨论】:

标签: java spring dependency-injection qualifiers


【解决方案1】:

您可以使用@Primary 标记一个实现,然后将其用作默认值。使用 xml 时,您可以使用 bean 元素内的 primary 元素将实例设置为要使用的主 bean 实例。

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/annotation/Primary.html

【讨论】:

  • javax Primary 的问题是它不是可以被覆盖的默认值。 (通过 xml 配置除外)因此,从我的角度来看,它不是默认值,而是该类在类路径中的唯一实现活动。有一个 jira 条目请求使用优先级而不是主要的,以允许声明比默认实现更高的优先级:jira.springsource.org/browse/SPR-10548
  • @Primary 仅在有多个候选解决方案时才会生效。如果您指定一个特定的@Qualifier,它应该只匹配一个候选人,然后应该使用那个。
猜你喜欢
  • 1970-01-01
  • 2016-06-29
  • 1970-01-01
  • 2021-12-07
  • 1970-01-01
  • 2011-03-17
  • 1970-01-01
  • 2013-05-12
  • 2020-11-04
相关资源
最近更新 更多