12

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

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

4

2 回答 2

5

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

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

如果你讨厌 XML(很多人讨厌),试试 Java Configuration,它从 3.0 开始可用,并在 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()这里只调用了一次,即使引用了两次。

于 2012-04-19T18:53:59.273 回答
5

试试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");
    }
}
于 2016-04-07T05:59:16.767 回答