2010-06-18 13 views
42

¿Alguien tiene un ejemplo de cómo usar Google Guice para inyectar propiedades de un archivo .properties. Me dijeron que Guice pudo validar que todas las propiedades necesarias existen cuando se inicia el inyector.Guice y archivos de propiedades

En este momento no puedo encontrar nada en la wiki de guice sobre esto.

Respuesta

67

Puede enlazar inmueble con Names.bindProperties(binder(), getProperties()), donde getProperties devuelve un objeto o una PropertiesMap<String, String> (leer el archivo de propiedades como un objeto Properties depende de usted).

Puede inyectarlos por su nombre usando @Named. Si usted tenía un archivo de propiedades:

foo=bar 
baz=true 

Usted podría inyectar los valores de estas propiedades en cualquier lugar que quería, así:

@Inject 
public SomeClass(@Named("foo") String foo, @Named("baz") boolean baz) {...} 
está inyectando

Guice puede convertir los valores de las cadenas al tipo, tales como el boolean anterior, automáticamente (suponiendo que la cadena es un formato apropiado). Esto funciona para tipos primitivos, enumeraciones y literales de clase.

+0

NB, utilizando guice 3.0-rc2 (última versión actual), esto solo funciona si importa @Named de los paquetes guice. *, No javax.inject.Named. –

+0

@ mjg123: Eso no debería ser cierto ... Implementé la función que hace que Guice '@ Named' y' @ javax.inject.Named' sean intercambiables. Consulte la prueba [aquí] (http://code.google.com/p/google-guice/source/browse/trunk/core/test/com/google/inject/name/NamedEquivalanceTest.java), que incluye una prueba que esto funciona con 'Names.bindProperties'. ¿Lo has probado? – ColinD

+1

Sí, lo probé. Estaba mirando esta página porque tenía la misma pregunta que el OP. Encontré eso específicamente para el caso de la inyección 'boolean', que * importó * que usé, aunque admito que estoy lejos de ser un experto en Guice. –