jis*_*non 4 java inheritance spring-boot
我有一个库 jar,我想提供给许多应用程序。我想要的行为是在库中创建一个通用的 spring 组件类。如果在应用程序中没有扩展相同的组件,则使用公共组件;如果它在应用程序中扩展,则使用扩展组件(子类)。这可能吗?- 仅当该类的子项不存在时才创建 CommonComponent。
我使用的是 Java 1.8, Springboot2.0
在库中创建类:
@Component
public class CommonComponent{}
Run Code Online (Sandbox Code Playgroud)
在使用该库的其中一个子应用程序中,我添加了一个子组件:
@Component
public class ChildComponent extends CommonComponent{}
Run Code Online (Sandbox Code Playgroud)
我希望创建一个组件 ChildComponent;但在上面的场景中,创建了 2 个组件 - CommonComponent 和 ChildComponent。
您可以这样做的一种方法是利用@ConditionalOnMissingBeanSpring Boot的注释。当与类中的 bean 定义结合使用时@Configuration,我们可以告诉 Spring 仅在尚未定义 bean 的情况下才定义它。
这是未经测试的:
@Configuration
public class CustomComponentConfiguration {
@ConditionalOnMissingBean(CustomComponent.class)
@Bean
public CustomComponent customComponent() {
return new CustomComponent();
}
}
Run Code Online (Sandbox Code Playgroud)
在这个例子中,当我们@Configuration运行时,Spring 确定是否有任何其他 bean 是CustomComponent. 如果没有,它将执行该customComponent()方法并定义您返回的任何 bean。因此,如果其他人定义了 a ChildComponent,则不会调用此方法。