Java 为什么不建议单例使用SpringServiceLocatoryFactoryBean?
我正在Spring中使用ServiceLocatoryFactoryBean实现服务定位器模式,如下所述: 我有多个解析器实现,希望在运行时选择正确的解析器实现来处理请求。每个解析器实现Java 为什么不建议单例使用SpringServiceLocatoryFactoryBean?,java,spring,spring-boot,Java,Spring,Spring Boot,我正在Spring中使用ServiceLocatoryFactoryBean实现服务定位器模式,如下所述: 我有多个解析器实现,希望在运行时选择正确的解析器实现来处理请求。每个解析器实现parse(String)方法 @Autowired 私人ParserFactory ParserFactory; @后期映射(“/parse/{format}”) 公共字符串分析(@PathVariable字符串格式,@RequestBody字符串内容){ 返回parserFactory.getParser(格
parse(String)
方法
@Autowired
私人ParserFactory ParserFactory;
@后期映射(“/parse/{format}”)
公共字符串分析(@PathVariable字符串格式,@RequestBody字符串内容){
返回parserFactory.getParser(格式).parse(内容);
}
(请注意,这是一个非常简单的示例。省略了安全性、服务、错误处理等)
这是可行的,但文件上说:
这样的服务定位器允许调用代码与服务分离
BeanFactoryAPI,通过使用适当的自定义定位器接口。
它们通常用于原型bean,即用于工厂
应该为每个调用返回一个新实例的方法。这个
客户端通过setter或setter接收对服务定位器的引用
构造函数注入,以便能够调用定位器的工厂
方法按需对于单例bean,最好是直接注入目标bean的setter或构造函数。
粗体部分与我的用例有什么关系?我的服务都是单例的,setter或构造注入不是一个选项,因为在请求进入控制器之前,我不知道请求的解析器类型
@Bean("parserFactory")
public FactoryBean serviceLocatorFactoryBean() {
ServiceLocatorFactoryBean factoryBean = new ServiceLocatorFactoryBean();
factoryBean.setServiceLocatorInterface(ParserFactory.class);
return factoryBean;
}