考虑一下代码:
public class MyProcessor<T extends GenericData> implements ProcessorInterface<T> {
@Autowired
private List<SomeCriteria<T>> criterias;
@Override
public long calculate(T data) {
long result = 0;
for (SomeCriteria c : criterias) {
result += c.calculate(data);
}
return long;
}
}
仅在SomeCriteria
实施和GenericData
中存在差异。例如。对于一个GenericData
,有几个
SomeCriteria
。因此,如果有3个GenericData
,则可以编写类似的代码:
public DataService {
@Autowire
private MyProcessor<DataOne> processorOne;
@Autowire
private MyProcessor<DataTwo> processorTwo;
@Autowire
private MyProcessor<DataThree> processorThree;
}
每次都没有为处理器编写实现?
答案 0 :(得分:2)
是的,有可能。从Spring 4.0开始,您可以执行诸如
之类的操作@Autowired
private Store<String> s1; // Injects the stringStore bean
@Autowired
private Store<Integer> s2; // Injects the integerStore bean
上面的示例是在Spring Framework 4.0 and Java Generics博客文章中通过Phil Webb在Spring网站上复制的。请阅读更多详情。
答案 1 :(得分:1)
您可以使用@Qualifier
注释创建多个相同类型的bean。我希望这对你有所帮助。
public DataService {
@Qualifier
private MyProcessor<DataOne> processorOne;
@Qualifier
private MyProcessor<DataTwo> processorTwo;
}