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?
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:
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%
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.
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:
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>
.
Tags und Links java spring generics annotations code-injection