Spring支持JSON配置吗?

时间:2012-04-19 18:14:49

标签: json spring applicationcontext

有没有人知道Spring是否有任何扩展允许通过JSON(或其他任何格式)而不是XML配置其ApplicationContext?我在官方文档中找不到任何内容,但我想知道是否有任何其他开源扩展可以允许这样做。

为了清楚起见,我不是在谈论配置SpringMVC来设置基于RESTful JSON的Web服务或类似的东西,只是可以通过JSON而不是XML来进行Spring应用程序配置。

2 个答案:

答案 0 :(得分:5)

据我所知,没有项目支持JSON作为配置源。它应该相对容易启动,(Spring容器不依赖于XML,它只是构造bean定义的一种方法)。然而,这比你想象的要多得多。

请注意,Spring提供了来帮助您编写正确的XML。你不会在JSON中获得那么多。此外,许多DSL都是在Spring XML和自定义命名空间支持的基础上构建的(,其他人使用它。)

如果您讨厌XML(许多人都这样做),请尝试从3.0开始提供的Java配置,并在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;
    }

}

有趣的事实:感谢一些花哨的代理,foo()在这里被称为一次,即使引用了两次。

答案 1 :(得分:4)

尝试在maven central上提供JSConf库,它支持Properties,HOCON和JSON格式。

您可以将外部文件中的值注入服务等等!

JavaConfig的示例用法:

您存储在 app.conf

文件中的数据
{ 
"root":{
"simpleConf":{
    "url":"Hello World",
    "port":12,
    "aMap":{
        "key1":"value1",
        "key2":"value2"
    },
    "aList":[
        "value1",
        "value2"
    ]
}}

您必须注入配置的地方

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

声明一个接口以从您的服务

访问您的配置值
@ConfigurationProperties("root/simpleConf")
public interface ConfigBean {
    String getUrl();
    int getPort();
    Map getAMap();
    List getAList();
}

你的Spring配置bean:

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