我有一个实用方法,该方法将字符串作为输入参数,并给我一个对应于输入的对象。我需要从Spring启动请求映射方法中调用此实用程序方法。
现在我的问题是下面两种方法的优缺点是什么?
方法1的示例代码:
**//SourceSystem can change at runtime**
public static FixedLengthReport fixedLengthReport(String sourceSystem) {
return new TdctFixedLengthReport(sourceSystem, dao);
}
方法2的示例代码:
@Bean
@Scope(value = "prototype")
**//SourceSystem can change at runtime**
public FixedLengthReport fixedLengthReport(String sourceSystem) {
return new TdctFixedLengthReport(sourceSystem, dao);
}
PS:从其他帖子中收集的样本。
答案 0 :(得分:1)
如果您已经使用过Spring,则选择单例(每个Spring容器实例一个bean对象)bean(这是默认范围),如果您的静态方法没有任何共享状态,则可以。如果您选择原型,则Spring容器将为每个getBean()
调用返回新的bean对象实例。并将该bean注入需要调用该方法的对象。与静态方法相比,此方法还对单元测试更友好,因为您可以在测试应用程序上下文中使用这种方法提供bean的测试实现。如果是静态方法,则需要PowerMock或其他第三方库来模拟棒方法进行单元测试。
更新
您的情况下应该有新的豆子
@Service
public MyReportBeanFactory {
@Autowired
private Dao dao;
public FixedLengthReport fixedLengthReport(String sourceSystem) {
return new TdctFixedLengthReport(sourceSystem, dao);
}
}
然后您需要将此工厂bean注入要调用fixedLengthReport()