2012-04-19 21 views
10

¿Alguien sabe si Spring tiene alguna extensión que permita configurar su ApplicationContext a través de JSON (o realmente cualquier otro formato) en lugar de XML? No pude encontrar nada en los documentos oficiales, pero me preguntaba si había otras extensiones de código abierto que pudieran permitir esto.¿Spring Support JSON Configuration?

Para que quede claro, no estoy hablando de configurar SpringMVC para configurar un servicio web RESTful basado en JSON o algo así, solo si es posible realizar la configuración de la aplicación Spring a través de JSON en lugar de XML.

Respuesta

5

Por lo que sé, no hay ningún proyecto para admitir JSON como fuente de configuración. Debería ser relativamente fácil poner en marcha, (el contenedor Spring no tiene dependencia de XML, es solo una forma de construir definiciones de bean). Sin embargo, es mucho más trabajo de lo que piensas.

Tenga en cuenta que Spring proporciona para ayudarlo a escribir el XML correcto. No obtendrás mucho en JSON. También se crearon muchas DSL encima de Spring XML y admite espacios de nombres personalizados (, y otros lo usan).

Si odias XML (muchos lo hacen), probar configuración de Java, disponible desde 3.0 y mejorado en 3.1:

@Configuration 
public class MyBeans { 

    @Bean 
    public Foo foo() { 
     return new Foo(); 
    } 

    @Bean 
    public Bar bar() { 
     return new Bar(foo()); 
    } 

    @Bean 
    public Buzz buzz() { 
     Buzz buzz = new Buzz(); 
     buzz.setFoo(foo()); 
     return buzz; 
    } 

} 

Un hecho interesante: gracias a algunos proxy de fantasía, foo() se llama exactamente una vez aquí, incluso aunque se hace referencia dos veces.

+0

Gracias. Supongo que trataré de atenerme a las anotaciones. Realmente no * odio * XML per se, pero me gustaría tener algunas alternativas. – donalbain

3

Pruebe la biblioteca JSConf disponible en maven central, es compatible con el formato Propiedades, HOCON y JSON.

¡Puede inyectar valores de archivos externos a su servicio y más!

Ejemplo de uso de JavaConfig:

sus datos almacenados en el archivo app.conf

{ 
"root":{ 
"simpleConf":{ 
    "url":"Hello World", 
    "port":12, 
    "aMap":{ 
     "key1":"value1", 
     "key2":"value2" 
    }, 
    "aList":[ 
     "value1", 
     "value2" 
    ] 
}} 

servicio de dónde se encuentra su configuración se debe inyectar

@Service("service") 
public class Service { 
    @Autowired 
    private ConfigBean configBean; 
} 

Declarar una interfaz para el acceso sus valores de configuración de su servicio

@ConfigurationProperties("root/simpleConf") 
public interface ConfigBean { 
    String getUrl(); 
    int getPort(); 
    Map getAMap(); 
    List getAList(); 
} 

Y la configuración de frijol de primavera:

@Configuration 
public class ContextConfiguration { 
    @Bean 
    public static ConfigurationFactory configurationFactory() { 
     return new ConfigurationFactory().withResourceName("app.conf") // 
       .withScanPackage("org.jsconf.core.sample.bean"); 
    } 
} 
Cuestiones relacionadas