可以用不同的参数化弹簧两次注入样品豆吗?

时间:2016-02-05 03:16:44

标签: java spring dependency-injection

考虑一下代码:

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;
}

每次都没有为处理器编写实现?

2 个答案:

答案 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;
   }