don*_*ain 12 spring json applicationcontext
有没有人知道Spring是否有任何扩展允许通过JSON(或其他任何格式)而不是XML配置其ApplicationContext?我在官方文档中找不到任何内容,但我想知道是否有任何其他开源扩展可以允许这样做.
为了清楚起见,我不是在谈论配置SpringMVC来设置基于RESTful JSON的Web服务或类似的东西,只是可以通过JSON而不是XML来进行Spring应用程序配置.
据我所知,没有项目支持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;
}
}
Run Code Online (Sandbox Code Playgroud)
有趣的事实:感谢一些奇特的代理,foo()
在这里被称为一次,即使引用了两次.
小智 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"
]
}}
Run Code Online (Sandbox Code Playgroud)
您在必须注入配置的地方提供服务
@Service("service")
public class Service {
@Autowired
private ConfigBean configBean;
}
Run Code Online (Sandbox Code Playgroud)
声明一个接口以从您的服务访问您的配置值
@ConfigurationProperties("root/simpleConf")
public interface ConfigBean {
String getUrl();
int getPort();
Map getAMap();
List getAList();
}
Run Code Online (Sandbox Code Playgroud)
还有你的 Spring 配置 bean:
@Configuration
public class ContextConfiguration {
@Bean
public static ConfigurationFactory configurationFactory() {
return new ConfigurationFactory().withResourceName("app.conf") //
.withScanPackage("org.jsconf.core.sample.bean");
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6576 次 |
最近记录: |