有没有人知道Spring是否有任何扩展允许通过JSON(或其他任何格式)而不是XML配置其ApplicationContext?我在官方文档中找不到任何内容,但我想知道是否有任何其他开源扩展可以允许这样做。
为了清楚起见,我不是在谈论配置SpringMVC来设置基于RESTful JSON的Web服务或类似的东西,只是可以通过JSON而不是XML来进行Spring应用程序配置。
答案 0 :(得分:5)
据我所知,没有项目支持JSON作为配置源。它应该相对容易启动,(Spring容器不依赖于XML,它只是构造bean定义的一种方法)。然而,这比你想象的要多得多。
请注意,Spring提供了xml-schema来帮助您编写正确的XML。你不会在JSON中获得那么多。此外,许多DSL都是在Spring XML和自定义命名空间支持的基础上构建的(spring-integration,mule-esb,其他人使用它。)
如果您讨厌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");
}
}