gpt4 book ai didi

spring - @ Spring 专攻

转载 作者:行者123 更新时间:2023-12-04 08:34:37 27 4
gpt4 key购买 nike

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 .例如,如果 OneBeanone.jarAnotherBeananother.jar ,我们可以通过重新配置类路径来改变 bean 的行为。

问题。 Spring中是否也存在诸如Specialization之类的东西?

我只能找到 @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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com