¿Cómo cambio la propiedad de una enumeración con Spring?

Necesito ocultar algunas opciones de menú en el entorno de producción, pero no en el desarrollo.

Implementé esto como una enumeración como esta:

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;
    }
}

Y luego, cuando necesito mostrar las opciones del menú, verifico si es necesario mostrar esa funcionalidad.

Por lo tanto, necesito poder cambiar el valor booleano utilizable cuando el entorno está en desarrollo. Pero no puedo encontrar ninguna manera de hacerlo en primavera.

¿Conoces una manera de hacer algo como esto?

Respuesta 1

Usted podría cambiar los campos de una enum, pero por lo general es considerada una mala idea y es a menudo un olor diseño.

Un mejor enfoque posiblemente sería no tener usableun campo en absoluto, sino convertirlo en una propiedad calculada:

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();
        }
    }
}

Obviamente, tendría que haber un método como SystemConfiguration.isDevelopmentSystem()este para que funcione.

En algunos sistemas que implementé, usé otro enumpara esto:

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;
        }
    }
}

Aquí utilicé una propiedad del sistema para especificar el tipo en tiempo de ejecución, pero cualquier otro tipo de configuración podría ser tan apropiado.

Respuesta: 2

las enumeraciones son esencialmente constantes. Con la codificación rígida de trueto FUNCTION_1y FUNCTION_3, Spring no puede inyectar nada.

Este es un duplicado de: Uso de Spring IoC para configurar valores de enumeración

Respuesta: 3

Estoy tratando de crear un módulo simple en netbeans que pueda registrar y retirar archivos en netbeans. Sin embargo, no entiendo cómo puedo crear un elemento de menú en el proyecto y los menús emergentes de archivos como ...

Recibo IndexOutOfBoundsException al subir un archivo zip. ¿Cuál podría ser la razón? ¿Cómo puedo resolverlo? Código: - String sf = ""; Cadena contentType = req.getContentType (); ...

Estoy usando datejs (ver www.datejs.com) para calcular la fecha y la hora de mañana (24 horas en el futuro) y enviar la fecha en un cuadro de texto oculto para insertar en db. Este es el código: <script ...

Hice un PluggableGraphMouse y 2 EditingGraphMousePluggings en mi programa Java con JUNG. Si configuro los modificadores para hacer clic izquierdo y derecho, funciona perfectamente bien, aquí está setModifiers ...