Поддерживает ли Spring конфигурацию JSON?

Кто-нибудь знает, есть ли Spring какие-либо расширения, которые позволяют настраивать свой ApplicationContext через JSON (или действительно любой другой формат), а не XML? Я не мог найти ничего в официальных документах, но мне было интересно, есть ли какие-либо другие расширения с открытым исходным кодом, которые могли бы это позволить.

Просто, чтобы быть ясным, я не говорю о настройке SpringMVC для настройки веб-службы на основе RESTful JSON или чего-либо подобного, просто если возможно сделать конфигурацию приложения Spring через JSON вместо XML.

Ответ 1

Насколько я знаю, нет проекта для поддержки 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() вызывается точно здесь, хотя и упоминается дважды.

Ответ 2

Попробуйте JSConf библиотеку, доступную на центральном сервере maven, она поддерживает свойства, формат 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");
    }
}