gpt4 book ai didi

java - 为什么 Spring 的 FactoryBean getObject 返回 null?

转载 作者:行者123 更新时间:2023-11-30 07:51:55 25 4
gpt4 key购买 nike

我想用自定义 Converter 创建一个 Spring ConversionService,但是 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 抛出一个 NullPointerExceptionconverters 按预期注入(inject)。为什么工厂返回 null?我该如何解决?

最佳答案

感谢 commentSotirios Delimanolis我得出以下解决方案:

@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 ( explanation ) 之前,工厂保持未完成状态。但是,如果返回的是 ConversionServiceFactoryBean 本身而不是 ConversionService,则不需要调用它。由于工厂是一个 InitializingBean 和一个 FactoryBean Spring 将在内部调用 afterPropertiesSetgetObject,如果一个 ConversionService 实例是需要。

关于java - 为什么 Spring 的 FactoryBean getObject 返回 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46364012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com