Ich erhalte die folgende Ausnahme, wenn ich den Code bereitstelle
%Vor%Ich habe 3 verschiedene Projekte, eines ist Common, das zweite ist Adapter und das dritte ist Service. Der Adapter ist abhängig von Common und Service ist abhängig von Adapter. Alle drei sind Maven-Projekte. Jetzt in meinem gemeinsamen Projekt habe ich eine Schnittstelle namens CommonAdapter.java
%Vor%Ich habe eine Klasse namens AdapterFactory.java im selben Projekt (ich, Common)
%Vor%Jetzt habe ich in meinem Adapter-Projekt die Implementierungsklassen für CommonAdapter.java Einer ist EndecaAdapetr.java und der andere ist SolarAdapter.java
%Vor%Nun möchte ich in meinem Dienstprojekt die Dienstmethode der obigen zwei Klassen basierend auf der Eingabe aufrufen.
%Vor% @Autowired
funktioniert nur, wenn keine Zweifel besteht, welche containerverwaltete Instanz injiziert werden soll. Grundsätzlich kann dies auf (mindestens) 3 Arten erreicht werden:
@Qualifier
Annotation verwendet wird) @Autowired
, sondern injizieren die Beans nach Namen. In Ihrem Fall haben Sie zwei Beans, die die IS-A-Bedingung validieren:
endeca
IS-A Adapter
und
solar
IS-A Adapter
.
Der Container hat also keinen eindeutigen Autowire-Kandidaten, daher stürzt er beim Einrichten ab.
Es gibt eine andere JPA-Standardlösung: Sie können @named und @inject verwenden, das Beispiel wird also so aussehen:
%Vor%und Inject wird so sein:
%Vor%Sie brauchen nicht, Name, Spring tun es selbst:)
Bereits aufgelöst hier .
Sie müssen die Komponente mit @javax.annotation.Resource(name="componentName")
einfügen.