ersetze Konstruktor-arg mit Spring Annotation

8

gibt es eine Möglichkeit, Konstruktor-Arg durch Annotation zu ersetzen?

Ich habe diesen Konstruktor:

%Vor%

und ich muss das in meiner Fassade injizieren:

%Vor%

Das Problem ist, dass ich nicht weiß, wie man den Wert des Parameters in costructor übergibt.

Vielen Dank im Voraus

[Weitere Informationen] Ich versuche mein Problem zu erklären.

%Vor%

Ich möchte diesen Code nur mit Anmerkungen konvertieren. Jemand kann erklären, wie?

    
Roberto de Santis 06.01.2011, 11:23
quelle

4 Antworten

4

Ich denke, dass @Inject alleine nicht hilft, Sie müssen auch eine @Qualifier Annotation verwenden.

Hier ist der relevante Abschnitt der Frühlingsreferenz:
3.9.3 Feinabstimmung von anmerkungsbasiertem Autowinding mit Qualifiern

Wenn ich das richtig verstanden habe, müssen Sie den @Qualifier Mechanismus verwenden.

Wenn Sie Spring's% verwenden co_de% Annotation , Sie können es wahrscheinlich inline machen, etwa so:

%Vor%

Aber wenn Sie die JSR-330 @Qualifier Annotation verwenden, Ich denke, Sie müssen Ihre eigene benutzerdefinierte Annotation erstellen, die mit @Qualifier markiert ist.

Eine andere Möglichkeit wäre @Qualifier Anmerkung. Damit können Sie die Ausdruckssprache, z. so:

%Vor%     
Sean Patrick Floyd 06.01.2011 12:59
quelle
2

Update: Ich fürchte, es ist nicht möglich, das zu tun, was Sie versuchen. Aus den Parametern des Injektionspunkts können keine Konstruktorargumente abgerufen werden. Ein FactoryBean wäre der erste Ort, an dem gesucht wird, aber die Metadaten für den Injektionspunkt werden nicht angegeben. (Zu beachten: Dieser Fall wird leicht von CDI abgedeckt)

Ursprüngliche Antwort: (funktioniert möglicherweise noch, wenn Sie Ihre Typen extern konfigurieren)

Verwenden Sie einfach @Inject im Konstruktor. Beachten Sie jedoch, dass Spring bei der Konstruktorinjektion runzelt. Berücksichtigen Sie die Setter / Feld-Injektion.

In Ihrem Fall haben Sie jedoch wahrscheinlich mehr als eine Beans vom Typ Class . Wenn dies der Fall ist, können Sie @Resource(name="beanName") verwenden.

Aus den Dokumenten von javax.inject.Inject :

  

Injizierbare Konstruktoren werden mit @Inject annotiert und akzeptieren keine oder keine Abhängigkeiten als Argumente. @Inject kann auf höchstens einen Konstruktor pro Klasse angewendet werden.

%Vor%
    
Bozho 06.01.2011 11:26
quelle
2

Eine Option für den Typ in Ihrem Konstruktor ist:

%Vor%

MUSS jedoch spezifische Implementierungen für jedes T haben.

Vorteil ist, dass Sie den T-Typ nicht als Parameter übergeben müssen.

    
danidacila 26.04.2012 12:11
quelle
0

Spring Java-Konfiguration könnte sein Hilfe hier. Wenn Sie eine Java-Klasse erstellen, die einfach Ihre Beans mit den Anmerkungen @Configuration und @Bean definiert, könnte dies in etwa so aussehen:

%Vor%

Stellen Sie sicher, dass die Klasse DaoConfiguration gescannt wird (normalerweise über @ComponentScan ) und ein passendes DAO-Objekt für Sie im Spring-Kontext erstellt wird. Die Bean hat den Namen der Methode, die in diesem Fall personDao ist, so dass Sie nach Name mit dem Namen personDao oder nach Typ eingeben können, wenn der Typ ist GenericDAO<Person> .

    
wassgren 21.12.2014 21:34
quelle