You should rewrite your class to something like this with the @Qualifier
annotation.
@Service
@Qualifier("a")
public class A extends AbstratClass<Modele>{
@Autowired
A(MyClass br) {
super(br);
}
@Service
@Qualifier("b")
public class B extends A{
@Autowired
B (MyClass br) {
super(br);
}
@Service
@Qualifier("c")
public class C extends A{
@Autowired
C (MyClass br) {
super(br);
}
You must also use the @Qualifier annotation on the instance of type A you're autowiring the Spring bean into.
Something like this:
public class Demo {
@Autowired
@Qualifier("a")
private A a;
@Autowired
@Qualifier("b")
private A a2;
public void demo(..) {..}
}
If you don't like to have this Spring configuration in your production code, you have to write the dependency injection logic with XML or Java configuration instead.
You can also specify a default bean of type A with the @Primary
annotation above one of your service classes that extends type A. Then Spring can autowire without specifying the @Qualifier
annotation.
Since Spring will never try to guess which bean to inject, you have to specify which one or mark one of them with @Primary
as long as its more than one bean of a type.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…