Большое спасибо! Сегодня я узнал кое-что фундаментальное (стоит понизить голос ;-)).

у создать веснуConversionService с обычаемConverterс, но возвращаемое значениеConversionServiceFactoryBean#getObject являетсяnull, Смотрите пример:

@Bean
@Autowired
public ConversionService conversionService(Set<Converter<?, ?>> converters) {
    final ConversionServiceFactoryBean factory = new ConversionServiceFactoryBean();
    factory.setConverters(converters);
    return checkNotNull(
            factory.getObject(),
            "conversionService must not be null.");
}

checkNotNull бросаетNullPointerException,converters вводятся как ожидалось. Почему фабрика возвращаетсяnull? Как я могу это исправить?

 grsdev722 сент. 2017 г., 13:50
поскольку вы используете ключевое слово new для создания фабричного компонента и сохранения его локальным, его нет в контексте Spring. Попробуйте создать метод (аннотированный @Bean), возвращающий фабричный бин, и принять его в качестве parm для Conversioner, а затем выполнить getObject.
 deamon25 сент. 2017 г., 09:38
Спасибо. Я не знал оafterPropertiesSet, Я не ожидал такой склонной к ошибкам модели, но теперь я знаю.
 Sotirios Delimanolis22 сент. 2017 г., 15:50
Это не потому, что это не в контексте Spring. Это не имеет значения. Вы можете просто создать экземпляр и управлять им. Но вы должны следовать требованиямFactoryBean а такжеInitializingBean интерфейсы и вызовafterPropertiesSet доgetObject.
 deamon22 сент. 2017 г., 14:01
Спасибо, вот и все! Я создал полный ответ, чтобы помочь другим с той же проблемой.

Ответы на вопрос(1)

Решение Вопроса

Благодарякомментарий изСотириос Делиманолис Я пришел к следующему решению:

@Bean
public ConversionServiceFactoryBean conversionService(Set<Converter<?, ?>> converters) {
    final ConversionServiceFactoryBean factory = new ConversionServiceFactoryBean();
    factory.setConverters(converters);
    return factory;
}

По сути, это сокращение для следующей конфигурации:

@Bean
public ConversionService conversionService(Set<Converter<?, ?>> converters) {
    final ConversionServiceFactoryBean factory = new ConversionServiceFactoryBean();
    factory.setConverters(converters);
    factory.afterPropertiesSet(); // necessary
    return factory.getObject();
}

Завод остается в незавершенном состоянии доafterPropertiesSet (объяснение) называется. Однако не нужно называть это, еслиConversionServiceFactoryBean Сам возвращается вместоConversionService, Поскольку фабрикаInitializingBean иFactoryBean Весна позвонитafterPropertiesSet а такжеgetObject внутренне, если необходим экземпляр ConversionService.

 deamon25 сент. 2017 г., 16:49
Большое спасибо! Сегодня я узнал кое-что фундаментальное (стоит понизить голос ;-)).
 Sotirios Delimanolis22 сент. 2017 г., 15:55
ConversionServiceFactoryBean уже производитConversionService боб, нет необходимости в другом. Просто передайте конвертерыConversionServiceFactoryBean и избавиться отconversionService @Bean метод.
 deamon25 сент. 2017 г., 09:52
Спасибо, я изменил и упростил решение.
 Sotirios Delimanolis25 сент. 2017 г., 16:14
Вы можете упростить это дальше.ConversionServiceFactoryBean это одновременноInitializingBean иFactoryBean, Оба эти интерфейса являются особенными для Spring и являются частью жизненного цикла бина. Весна призоветafterPropertiesSet а такжеgetObject для вас, если вы зарегистрируете bean-компонент такого типа, поместив результат в контекст приложения. Так что самый простой способ сделать это - просто создать экземплярConversionServiceFactoryBean, установите его конвертеры и верните его. Остальное сделано весной.

Ваш ответ на вопрос