java - 如何使用 Spring 更改枚举的属性?

标签 java spring

我需要在生产环境中隐藏一些菜单选项,但在开发中不需要。

我将其实现为这样的枚举:

public enum Functionality {
    FUNCTION_1(true),
    FUNCTION_2,
    FUNCTION_3(true);

    private boolean usable;

    Functionality() {
        this(false);
    }

    Functionality(boolean usable) {
        this.usable = usable;
    }

    public boolean isUsable() {
        return usable;
    }
}

然后,当我需要显示菜单选项时,我会检查是否需要显示该功能。

所以我需要能够在环境开发时更改可用的 boolean 值。但我找不到任何方法在 Spring 中做到这一点。

你知道有什么方法可以做这样的事情吗?

最佳答案

可以更改枚举的字段,但这通常被认为是一个坏主意,并且通常是一种设计味道。

更好的方法可能是根本不使用 usable 字段,而是将其设为计算属性:

public enum Functionality {
    FUNCTION_1(true),
    FUNCTION_2,
    FUNCTION_3(true);

    private final boolean restricted;

    Functionality() {
       this(false);
    }

    Functionality(boolean restricted) {
        this.restricted = restricted;
    }

    public boolean isRestricted() {
        return restricted;
    }

    public boolean isUsable() {
        if (!restricted) {
            return true;
        } else {
            return SystemConfiguration.isDevelopmentSystem();
        }
    }
}

显然,需要有像 SystemConfiguration.isDevelopmentSystem() 这样的方法才能实现此功能。

在我实现的某些系统中,我使用了另一个枚举:

public enum SystemType {
    PRODUCTION,
    TESTING,
    DEVELOPMENT;

    public final SystemType CURRENT;

    static {
        String type = System.getEnv("system.type");
        if ("PROD".equals(type)) {
            CURRENT = PRODUCTION;
        } else if ("TEST".equals(type)) {
            CURRENT = TESTING;
        } else {
            CURRENT = DEVELOPMENT;
        }
    }
}

这里我使用系统属性在运行时指定类型,但任何其他配置类型可能也合适。

关于java - 如何使用 Spring 更改枚举的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5961591/

相关文章:

java - Spring Security 5 根据 JWT 声明填充权限

java - 不满意的依赖异常 : Error creating bean with name "empController"

java - 在同一java应用程序的不同实例之间共享数据结构的最佳方式?

java - 我需要有关我用 JAVA 编写的程序的帮助(空指针异常)

java - Mac 10.8 上的 Eclipse - 安装了 1.7.0 JRE/JDK,但 Eclipse 无法启动

java - 使用 Chrome 将 Selenium Java 下载文件到特定目录

java - 我有一个正在更改的数组,即使我没有专门更改它

java - 从 java.sql.CallableStatement 调用的存储过程中检索记录

spring - Spring-boot 是否通过@GeneratedValue 改变了 ids 自动增量的工作方式?

java - Spring项目-在jsp页面中显示mysql表数据