作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
CDI具有Specialization的特点,我正在 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"; }
}
public class SomewhereElse {
@Inject
OneBean oneBean; // we know nothing of AnotherBean here!
public void guessWhosThere() {
return oneBean.whoAmI(); // yet it returns "AnotherBean"
}
}
OneBean
,这就会变得非常有用。实际使用和不使用
AnotherBean
.例如,如果
OneBean
在
one.jar
和
AnotherBean
在
another.jar
,我们可以通过重新配置类路径来改变 bean 的行为。
@Primary
注释,但是具有不同的语义:
@Primary
不会替换一个 bean,而只是将多个备选方案中的一个标记为主要备选方案。特别是,据我了解,我无法像
@Specializes
那样构建深层继承层次结构。 .
最佳答案
使用 Spring boot,您可能会通过利用其自动配置机制获得类似的结果,例如与 bean condition如@ConditionalOnMissingBean
:
public class OneBean {
public String whoAmI() { return "OneBean"; }
}
@Configuration
public class OneConfiguration {
@Bean
@ConditionalOnMissingBean
public OneBean getBean() { return new OneBean(); }
}
@Component
public class AnotherBean extends OneBean {
@Override
public String whoAmI() { return "AnotherBean"; }
}
但是,如果您不确定哪些配置是专门的,则必须确保所有配置都相应地构建:
public class OneBean {
public String whoAmI() { return "OneBean"; }
}
public class AnotherBean extends OneBean {
@Override
public String whoAmI() { return "AnotherBean"; }
}
public class YetAnotherBean extends AnotherBean {
@Override
public String whoAmI() { return "YetAnotherBean"; }
}
@Configuration
public class OneConfiguration {
@Bean
@ConditionalOnMissingBean
public OneBean getBean() { return new OneBean(); }
}
@Configuration
public class AnotherConfiguration {
@Bean
@ConditionalOnMissingBean
public AnotherBean getBean() { return new AnotherBean(); }
}
@Configuration
public class YetAnotherConfiguration {
@Bean
@ConditionalOnMissingBean
public YetAnotherBean getBean() { return new YetAnotherBean(); }
}
// and so on...
关于spring - @ Spring 专攻,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26912547/
CDI具有Specialization的特点,我正在 Spring 世界中寻找它。 细节。 在 CDI 中, @Specializes 注释允许人们仅通过覆盖它来改变 bean 的行为。这对该 bea
我是一名优秀的程序员,十分优秀!