2012-04-19 57 views
10

Có ai biết Spring có bất kỳ phần mở rộng nào cho phép cấu hình ApplicationContext của nó qua JSON (hoặc thực sự là bất kỳ định dạng nào khác) thay vì XML không? Tôi không thể tìm thấy bất cứ điều gì trong các tài liệu chính thức, nhưng tôi đã tự hỏi nếu có bất kỳ phần mở rộng mã nguồn mở nào khác có thể cho phép điều này. Chỉ cần rõ ràng, tôi không nói về việc cấu hình SpringMVC để thiết lập một dịch vụ web dựa trên JSON RESTful hoặc bất cứ thứ gì như thế, chỉ cần cấu hình ứng dụng Spring thông qua JSON thay cho XML.Cấu hình JSON hỗ trợ Spring?

Trả lời

5

Theo như tôi biết không có dự án nào hỗ trợ JSON làm nguồn cấu hình. Nó sẽ tương đối dễ dàng để bắt đầu, (Spring container không phụ thuộc vào XML, nó chỉ là một cách để xây dựng các định nghĩa bean). Tuy nhiên nó có nhiều công việc hơn bạn nghĩ.

Lưu ý rằng Spring cung cấp để hỗ trợ bạn viết XML chính xác. Bạn sẽ không nhận được nhiều trong JSON. Ngoài ra nhiều DSL được xây dựng trên đầu trang của Spring XML và hỗ trợ không gian tên tùy chỉnh (, và những người khác sử dụng nó).

Nếu bạn ghét XML (nhiều làm), thử Java cấu hình, có sẵn từ 3.0 và cải thiện trong 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; 
    } 

} 

thực tế thú vị: nhờ vào một số proxy ưa thích, foo() được gọi đúng một lần ở đây, thậm chí mặc dù được tham chiếu hai lần.

+0

Cảm ơn. Đoán tôi sẽ cố gắng để dính vào chú thích. Không thực sự * ghét * XML cho mỗi người, nhưng tôi rất vui khi có một số lựa chọn thay thế. – donalbain

3

Hãy thử JSConf thư viện có sẵn trên trung tâm maven, nó hỗ trợ Thuộc tính, định dạng HOCON và JSON.

Bạn có thể chèn các giá trị từ tệp bên ngoài vào dịch vụ của mình và hơn thế nữa!

sử dụng Mẫu JavaConfig:

Bạn dữ liệu được lưu trữ trong hồ sơ app.conf

{ 
"root":{ 
"simpleConf":{ 
    "url":"Hello World", 
    "port":12, 
    "aMap":{ 
     "key1":"value1", 
     "key2":"value2" 
    }, 
    "aList":[ 
     "value1", 
     "value2" 
    ] 
}} 

Bạn dịch vụ mà cấu hình của bạn phải được tiêm

@Service("service") 
public class Service { 
    @Autowired 
    private ConfigBean configBean; 
} 

Khai báo một giao diện để truy cập giá trị cấu hình của bạn từ dịch vụ

@ConfigurationProperties("root/simpleConf") 
public interface ConfigBean { 
    String getUrl(); 
    int getPort(); 
    Map getAMap(); 
    List getAList(); 
} 

Và đậu cấu hình Spring của bạn:

@Configuration 
public class ContextConfiguration { 
    @Bean 
    public static ConfigurationFactory configurationFactory() { 
     return new ConfigurationFactory().withResourceName("app.conf") // 
       .withScanPackage("org.jsconf.core.sample.bean"); 
    } 
} 
Các vấn đề liên quan