gpt4 book ai didi

java - 我可以扩展 @Component 并创建另一个 @Component 类并一次只提供一个吗?

转载 作者:行者123 更新时间:2023-11-29 06:48:47 28 4
gpt4 key购买 nike

我有一个库 jar,我想将其提供给许多应用程序。我想要的行为是在库中创建一个通用的 spring 组件类。如果在应用程序中,没有扩展相同的组件,则使用公共(public)组件;如果它在应用程序中扩展,则使用扩展组件(子类)。这可能吗? - 仅当该类的子级不存在时才创建 CommonComponent。

我用的是Java 1.8,Springboot2.0

在库中创建类:

@Component
public class CommonComponent{}

在其中一个使用该库的子应用程序中,我添加了一个子组件:

@Component
public class ChildComponent extends CommonComponent{}

我期望创建一个组件 ChildComponent;但在上述场景中,创建了 2 个组件 - CommonComponent 和 ChildComponent。

最佳答案

您可以这样做的一种方法是利用 @ConditionalOnMissingBean Spring Boot 具有的注解。当与 @Configuration 类中的 bean 定义结合使用时,我们可以告诉 Spring 仅在它还没有 bean 时才定义我们的 bean。

这是未经测试的:

@Configuration
public class CustomComponentConfiguration {

@ConditionalOnMissingBean(CustomComponent.class)
@Bean
public CustomComponent customComponent() {
return new CustomComponent();
}
}

在此示例中,当我们的@Configuration 运行时,Spring 确定是否有任何其他bean 是CustomComponent。如果没有,它会执行 customComponent() 方法并定义您返回的任何 bean。因此,如果其他人定义了一个 ChildComponent,则不会调用此方法。

关于java - 我可以扩展 @Component 并创建另一个 @Component 类并一次只提供一个吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56580722/

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