2016-10-07 3 views
3

Ist es möglich, eine Spring Bean 2 Schnittstellen zu implementieren und in der Lage sein, diese Bean mit beiden Schnittstellen zu autowire?Autowire Spring Bean implementiert zwei Schnittstellen

Ich habe folgendes:

Zwei Schnittstellen

public interface ServiceA {} 

public interface ServiceB {} 

Zwei Controller, die Konstruktor autowiring verwenden Sie einen anderen Service

@RestController 
public class ControllerA { 

    public ControllerA(ServiceA service) {} 

} 

@RestController 
public class ControllerB { 

    public ControllerB(ServiceB service) {} 

} 

Eine Klasse zu injizieren, die implementiert sowohl die Dienste

@Service 
public class ServiceImpl implements ServiceA, ServiceB { } 

Ich erhalte eine NoSuchBeanDefinitionException

Verursacht durch: org.springframework.beans.factory.NoSuchBeanDefinitionException: Keine Warte Bohnen vom Typ [ServiceB] für Abhängigkeits [ServiceB] gefunden: mindestens 1 Bohne erwartet, die für so autowire Kandidaten qualifiziert diese Abhängigkeit. Dependency Anmerkungen: {}

Ich bin mit Spring-Boot-Version 1.4.0

+0

Ich kann keine @Service sehen oder ähnlich in dieser Schnittstellen –

Antwort

1

Ja, es ist möglich, aber ist es wichtig, den Service Bean vom Typ ServiceImpl zu schaffen und nicht als eine der Service-Schnittstellen :

@Bean 
ServiceImpl service(){ 
return new Serviceimpl(); 
} 

Spring verwendet Reflexion über die erklärt Bean-Typ, um herauszufinden, was es implementiert und nicht auf bean.getClass() -Schnittstellen.

Hoffnung, die

+0

ich dies versucht. Es hat nicht funktioniert – scarba05

0

Sie hilft, die @Qualifier Annotation nutzen könnten. Sie kann neben @Autowired oder @Inject am Injektionspunkt angewendet werden, um festzulegen, welche Bean injiziert werden soll.

@Autowired 
@Qualifier("iceCream") 
public void setDessert(Dessert dessert) { 
    this.dessert = dessert; 
} 

Quelle: Frühling in Aktion 4. Auflage,

Verwandte Themen