Frühling – spritzen Sie 2 Bohnen der gleichen Sorte ein

Lesezeit: 2 Minuten

Benutzer-Avatar
Guillaume

Ich mag die konstruktorbasierte Injektion, da ich damit injizierte Felder erstellen kann final. Ich mag auch die annotationsgesteuerte Injektion, da sie meine Arbeit vereinfacht context.xml. Ich kann meinen Konstruktor mit markieren @Autowired und alles funktioniert gut, solange ich nicht zwei Parameter des gleichen Typs habe. Ich habe zum Beispiel eine Klasse:

@Component
public class SomeClass {
    @Autowired(required=true)
    public SomeClass(OtherClass bean1, OtherClass bean2) {
        …
    }
}

und einen Anwendungskontext mit:

<bean id="bean1" class="OtherClass" />
<bean id="bean2" class="OtherClass" />

Es sollte eine Möglichkeit geben, die Bean-ID im Konstruktor der Klasse anzugeben SomeClass, aber ich kann es nicht in der Dokumentation finden. Ist das möglich oder träume ich von einer Lösung, die es noch nicht gibt?

Benutzer-Avatar
Bozo

@Autowired ist nach Typ (in diesem Fall); verwenden @Qualifier nach Namen automatisch verdrahten, indem Sie dem Beispiel folgen aus Frühlingsdokumenten:

public SomeClass(
    @Qualifier("bean1") OtherClass bean1, 
    @Qualifier("bean2") OtherClass bean2) {
    ...
}

Hinweis: Im Gegensatz zu @Autowired, das auf Felder, Konstruktoren und Methoden mit mehreren Argumenten anwendbar ist (was eine Eingrenzung durch Qualifiziereranmerkungen auf Parameterebene ermöglicht), wird @Resource nur für Felder und Methoden zum Festlegen von Bean-Eigenschaften mit einem einzigen Argument unterstützt. Bleiben Sie daher bei Qualifizierern, wenn Ihr Injektionsziel ein Konstruktor oder eine Methode mit mehreren Argumenten ist.

(unter diesem Text ist das vollständige Beispiel)

  • @Autowire ist auch namentlich, aber in diesem Fall müssen Sie Setter angeben. Aber hier werden Konstruktorargumente bevorzugt, und @Autowire funktioniert nicht, wenn beide Argumente vom gleichen Typ sind. Daher kann die Sache mit gelöst werden @Qualifier.

    – Adel Ansari

    28. Januar 2010 um 10:37 Uhr

  • Es ist der Frühling @Qualifier, nicht der Standard javax.inject.Qualifier

    – mcooliv

    19. Oktober 2016 um 15:30 Uhr

  • @Qualifier funktioniert nicht in der Konstruktorinjektion, ist es abhängig vom Variablennamen im Konstruktor für zB public Employee(String name, int age, @Qualifier("address1") Address address) address1 wird nicht injiziert ?

    – Harish Gupta

    5. August 2019 um 14:28 Uhr

1109230cookie-checkFrühling – spritzen Sie 2 Bohnen der gleichen Sorte ein

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy