Spring 是不是支持 JSON 配置?
Posted
技术标签:
【中文标题】Spring 是不是支持 JSON 配置?【英文标题】:Does Spring Support JSON Configuration?Spring 是否支持 JSON 配置? 【发布时间】:2012-04-19 18:14:48 【问题描述】:有谁知道 Spring 是否有任何扩展允许通过 JSON(或任何其他格式)而不是 XML 配置其 ApplicationContext?我在官方文档中找不到任何内容,但我想知道是否有任何其他开源扩展可以允许这样做。
为了清楚起见,我不是在谈论配置 SpringMVC 以设置基于 RESTful JSON 的 Web 服务或类似的东西,只要可以通过 JSON 而不是 XML 进行 Spring 应用程序配置。
【问题讨论】:
【参考方案1】:据我所知,没有项目支持 JSON 作为配置源。启动起来应该比较容易,(Spring 容器不依赖 XML,它只是构造 bean 定义的一种方式)。然而,这比您想象的要多得多。
请注意,Spring 提供了xml-schema 来帮助您编写正确的 XML。在 JSON 中你不会得到那么多。此外,许多 DSL 构建在 Spring XML 和自定义命名空间支持之上(spring-integration、mule-esb 和其他人使用它)。
如果你讨厌 XML(很多人讨厌),试试 Java 配置,它从 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()
在这里只被调用一次,即使被引用了两次。
【讨论】:
谢谢。我想我会尽量坚持注释。并不是真的讨厌 XML 本身,但我会很高兴有一些替代品。【参考方案2】:试试 maven Central 上的 JSConf 库,它支持属性、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");
【讨论】:
以上是关于Spring 是不是支持 JSON 配置?的主要内容,如果未能解决你的问题,请参考以下文章
开发人员建议阅读:Spring Boot 架构中的国际化支持实践
不支持 Spring Rest POST Json RequestBody 内容类型