gpt4 book ai didi

java - 如何禁用在 Spring 中使用 @Component 注释创建 bean?

转载 作者:行者123 更新时间:2023-12-04 12:05:26 24 4
gpt4 key购买 nike

我的项目中有一些用于重构逻辑的通用接口(interface)。它看起来像这样:

public interface RefactorAwareEntryPoint {

default boolean doRefactor() {
if (EventLogService.wasEvent(getEventType())) {
return true;
}
boolean result = doRefactorInternal();
if (result) {
EventLogService.registerEvent(eventType);
}
return result;
}

String getEventType();

boolean doRefactorInternal();
}
然后,当我需要编写一些重构时 - 我用方法实现这个接口(interface),标记类,如 @Component , 和 Spring in loop 评估每个接口(interface)实现并将其注册到数据库中。
但是我们有很多重构(每年 - 200-300 个新)。手动禁用旧的实现很难,而且我们的 spring 上下文中有很多 bean。
我们可以做些什么,例如,使用一些注解——这将在某些条件下禁用组件创建?
例如:
@Component
@Enabled(YEAR.2020)
public class CustomRefactor implements RefactorAwareEntryPoint {
// Code implementation
}
这个注解会像这样工作(伪代码):
if (YEAR.2020) {
create bean -> new CustomRefactor()
}
什么时候会 YEAR.2021 - 我们将没有来自 YEAR.2020 的 bean 在 Spring 的背景下。

最佳答案

使用注解 @Profile这使得应用程序配置和 bean 在某些环境中可用。
您可以在 Spring Boot 2.4.0 reference documentation: 3. Profiles 找到更多信息

Spring Profiles provide a way to segregate parts of your application configuration and make it be available only in certain environments. Any @Component, @Configuration or @ConfigurationProperties can be marked with @Profile to limit when it is loaded


将每年视为一个单独的环境。
@Component
@Profile("2020")
public class CustomRefactor2020 implements RefactorAwareEntryPoint {
// Code implementation
}
@Component
@Profile("2021")
public class CustomRefactor2021 implements RefactorAwareEntryPoint {
// Code implementation
}

关于java - 如何禁用在 Spring 中使用 @Component 注释创建 bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63586118/

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