@Specializes in Spring

fxn*_*xnn 7 spring subclass specialization cdi

CDI具有专业化的特征,我在Spring世界中寻找它.

细节. 在CDI中,@Specializes注释允许人们通过覆盖它来改变bean的行为.这对于该bean的用户是完全透明的,例如,如果我们有的话

public class OneBean {
  public String whoAmI() { return "OneBean"; }
}

@Specializes
public class AnotherBean extends OneBean {
  @Override
  public String whoAmI() { return "AnotherBean"; }
}
Run Code Online (Sandbox Code Playgroud)

我们可以

public class SomewhereElse {
  @Inject
  OneBean oneBean; // we know nothing of AnotherBean here!

  public void guessWhosThere() {
    return oneBean.whoAmI(); // yet it returns "AnotherBean"
  }
}
Run Code Online (Sandbox Code Playgroud)

只要OneBean实际使用和不使用,这就非常有用AnotherBean.例如,如果OneBeanin one.jarAnotherBeanin another.jar,我们可以通过重新配置类路径来改变bean的行为.

题.Spring中是否也存在类似Specialization的东西?

我只能找到@Primary注释,但是它具有不同的语义:@Primary不替换一个bean,而只是标记多个替代中的一个作为主要选项.特别是,据我所知,我无法构建一个深层继承层次结构,因为它可能@Specializes.

小智 4

简短回答 在 Spring 4 中,这是不可能的。时期。尽管如此,在 2016 年,Spring 过时的依赖注入模型不可能实现这样的目标。