我们有一个遗留项目,其中有一个名为DataProcessor
的类。因此,项目的每个模块都有自己的数据处理器,它们都扩展了一个名为BasicDataProcessor
的类。例如,
public ProductDataProcessor extends BasicDataProcessor {
public ProductDataProcessor(String logFileDirectory, String loggingLevel){
/*constructor code*/
}
}
public CustomerDataProcessor extends BasicDataProcessor {
public CustomerDataProcessor(String logFileDirectory, String loggingLevel){
/*constructor code*/
}
}
有很多这样的Data Processor
,它们都有自己的构造函数,它使用传递的属性初始化特定的数据处理器作为构造函数参数。
我们正在将此遗留应用程序转换为Spring Boot应用程序。我的目标是在各自的@Service类Spring中自动装载这个数据处理器(包括大多数业务逻辑)。因此对于例如ProductService
将ProductDataProcessor
自动装配。
public class ProductService {
@Autowired
private ProductDataProcessor productDataProcessor;
/*-----------------------
--Other service code---
-----------------------*/
}
一种方法是创建@Configuration类并使用其属性初始化每个此类数据处理器。我可以在属性文件中指定数据处理器特定的属性,也可以从那里读取。
@Configuration
public class Config {
@Bean
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public ProductDataProcessor productDataProcessor(String logFileDirectory, String loggingLevel){
return new ProductDataProcessor(logFileDirectory, loggingLevel);
}
/*--------------------------------------------
--------------------------------------------
--------------------------------------------
---------other Data Processor Beans---------
--------------------------------------------
--------------------------------------------*/
}
然后ProductService
将productDataProcessor
自动装配。
有没有其他优雅和通用的方法来实现这一目标?例如,一个通用原型bean,它将根据要求的Data Processor
对象的类型创建一个新实例。
@Bean
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public BasicDataProcessor productDataProcessor(String logFileDirectory, String loggingLevel, String dataProcessorClassType){
// create an object of `dataProcessorClassType` and return
}
或者考虑每个数据处理器类的任何其他工作正在扩展BasicDataProcessor
?