Tenemos una situación en la que proporcionamos una configuración externa en forma de un mapa para nuestros programas en ejecución. He descubierto que JSR-330 Dependency Injection ofrece una manera mucho más limpia de usar ese mapa de configuración en el código en lugar de pasar el mapa o usar JNDI para obtenerlo.Cómo inyectar constantes de cadenas fácilmente con Weld?
@Inject @Named("server.username") String username;
permite que la implementación de JSR-330 llene este campo automáticamente.
Con Guice I puede establecer el valor con
bindConstant().annotatedWith(Names.named(key)).to(value);
me gustaría ser capaz de hacer lo mismo en Weld ("server.username" se unen a, por ejemplo "foobar") y entiendo que el mecanismo lo más probable es beans.xml, pero prefiero una alternativa de código "alimentar este mapa a Weld, por favor". ¿Cuál sería una buena manera de hacer esto?
EDITAR 10/16/2013: Después de mirar en la daga que funciona en tiempo de compilación y no tiempo de ejecución, que encontró que con nosotros por lo general con un 10-20 por programa que podría vivir con tener un método para cada configuración @Provider
cadena que luego busca en el mapa de configuración. Esto permite el comportamiento específico del método (incluidos los valores predeterminados), la capacidad de proporcionar javadoc y la capacidad de poner todos estos métodos en la misma clase. También funciona bien con Weld fuera de la caja. Estoy considerando escribir una explicación más completa en una entrada de blog.
Gracias por su arduo trabajo. Bounty papeleo iniciado. –
Con respecto al "error en el tiempo de implementación si falta el valor". En nuestra situación, inyectando valores de configuración, ¡eso es una característica! –
@ Thorbjørn Ravn Andersen Gracias por la recompensa. Ese fue el pico más dramático en la reputación. – SplinterReality