2012-04-19 86 views
10

有誰知道Spring是否有任何允許通過JSON(或其他任何格式)配置其ApplicationContext而不是XML的擴展?我在官方文檔中找不到任何內容,但我想知道是否還有其他任何可以允許這樣做的開源擴展。Spring支持JSON配置嗎?

只是要說清楚,我並不是在談論如何配置SpringMVC來設置基於REST的基於JSON的Web服務或類似的東西,就像通過JSON而不是XML來完成Spring應用程序配置一樣。

回答

5

據我所知,沒有項目支持JSON作爲配置源。啓動起來應該相對容易,(Spring容器不依賴於XML,它只是一種構造bean定義的方法)。然而,它比你想象的要多得多。

請注意,Spring提供來協助您編寫正確的XML。你不會在JSON中獲得那麼多。此外,許多DSL都是基於Spring XML和自定義命名空間支持構建的(和其他人使用它)。

如果你恨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()被調用一次在這裏,甚至儘管引用了兩次。

+0

感謝。猜猜我會嘗試堅持註釋。本質上不討厭* XML,但我會很高興有一些選擇。 – donalbain 2012-04-19 19:01:51

3

嘗試JSConf庫在maven central上可用,它支持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"); 
    } 
}