2012-04-19 2 views
10

Spring이 XML이 아닌 JSON (또는 실제로 다른 형식)을 통해 ApplicationContext를 구성 할 수있는 확장자를 가지고 있는지 알고 있습니까? 공식 문서에서 아무 것도 찾을 수 없었지만이를 허용 할 수있는 다른 오픈 소스 확장이 있는지 궁금합니다.Spring은 JSON 구성을 지원합니까?

XML 대신 JSON을 통해 Spring 애플리케이션 구성을 수행 할 수있는 경우 SpringMVC를 사용하여 RESTful JSON 기반 웹 서비스 또는 이와 유사한 설정을 구성하는 방법에 대해 설명하는 것이 아닙니다.

답변

5

내가 아는 한 JSON을 구성 소스로 지원하는 프로젝트가 없습니다. 시작하기가 상대적으로 쉬워야합니다 (스프링 컨테이너는 XML에 의존하지 않으며 빈 정의를 생성하는 방법 일뿐입니다). 그러나 그것은 생각보다 훨씬 더 많은 작업입니다.

올바른 XML 작성을 돕기 위해 Spring에서 을 제공합니다. JSON에서 그렇게 많이 얻지 못할 것입니다. 또한 많은 DSL은 Spring XML과 사용자 정의 네임 스페이스 (, 및 다른 사람들이 사용)를 기반으로 구축되었습니다. 당신이 XML을 (많은 할) 싫어하면

, 3.1에서 3.0부터 사용할 수 향상된 자바 구성, 시도 :

@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

3

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; 
} 

를 주입해야

당신 서비스 서비스의 구성 값

그리고 당신의 봄 구성 콩 :

@Configuration 
public class ContextConfiguration { 
    @Bean 
    public static ConfigurationFactory configurationFactory() { 
     return new ConfigurationFactory().withResourceName("app.conf") // 
       .withScanPackage("org.jsconf.core.sample.bean"); 
    } 
}