I would like to have a singleton bean instance by generic parameter based on a single @Component
generic class.
(I am using Spring 4.)
My code :
I have an interface
like this :
public interface Mapper<I, O> {
...
}
And multiple implementation of it which are Spring @Component
s (singletons). Something like this :
@Component
public class MapperA implements Mapper<ClazzAI, ClazzAO> {
...
}
and
@Component
public class MapperB implements Mapper<ClazzBI, ClazzBO> {
...
}
where ClazzAI
, ClazzAO
, ClazzBI
and ClazzBO
are basic Java classes.
I have another Spring @Component
(singleton) which have a Mapper
class
as a generic parameter :
@Component
public class TransformerImpl<I, O, M extends Mapper<I, O>> {
/** The Mapper */
protected final M mapper;
@Inject
private TransformerImpl(final M mapper) {
this.mapper= mapper;
}
...
}
and I would like to use it like this :
@Inject
private TransformerImpl<ClazzAI, ClazzAO, MapperA> transformerA;
@Inject
private TransformerImpl<ClazzBI, ClazzBO, MapperB> transformerB;
The problem :
But Spring is not able to instantiate those 2 objects because it founds 2 implementations of Mapper
: MapperA
and MapperB
even if I specify which implementation I want as a generic parameter.
Any idea how to make it without the need of instantiate all of those beans in a @Configuration
class
?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…