Ich habe meine Klassen mit @Repository, @Resource, @Component, @Service-Annotationen versehen, aber diese Klassen müssen in 2 Umgebungen ausgeführt werden. Die erste Umgebung basiert auf der Feder 2.x, während die andere keine Feder hat. Ich bin sicher, der Code wird ohne die Frühlingsgläser fehlschlagen & Ich möchte Ideen von Ihnen wissen, wie ich die Anmerkungen behalten kann, aber immer noch in beiden UmgebungenAbhängigkeit von Spring-Anmerkungen
Antwort
Da Sie einen akzeptierten Beitrag nicht löschen können, schlage ich vor, Sie lesen/Stimme Hans' Post, die eine viel bessere Erklärung als mein Originals ist: Dependency on Spring's annotations
Wenn das Klischee Anmerkungen mit (@Service usw.), besteht der Nachteil darin, dass Sie die Bean-Validierung für die Kompilierung erhalten, indem Sie mit der Spring-Kontext-Bibliothek in Ihrem Code verbunden werden. Ich sehe 3 sofortige Optionen:
1) Entfernen Sie die Anmerkungen, und konfigurieren Sie Ihre Beans in XML.
2) Kopieren Sie die Datei spring-context.jar (oder die entsprechende Bibliothek, die Ihre Stereotyp-Annotationen enthält) in Ihr Nicht-Spring-Projekt, um die Abhängigkeiten aufzulösen. Lassen Sie Spring jedoch nicht konfiguriert, damit es in Ihrem Code nicht verwendet wird.
3) Entfernen Sie die Anmerkungen aus Ihren konkreten Klassen, und erweitern Sie sie mit "Spring" -Versionen. Dieser Ansatz kann oder auch nicht ein wenig invasiven Ihren Entwurf sein, aber eine Überlegung wert:
public class MyDAO {
protected SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
// .. Your DAO code resides here ..
}
und die Federunterklasse:
@Repository
public class MySpringDAO extends MyDAO {
@AutoWired
protected SessionFactory sessionFactory;
}
Auf diese Weise Ihr nicht-Spring-Projekt verwenden kann " MyDAO "und schließen Sie die Klasse" MySpringDAO "aus dem Build aus.
Für jede Anmerkung in Java gibt es eine entsprechende Klassendatei. Wenn Sie herausfinden, welche Anmerkungen Sie verwenden, können Sie die Klassendateien in die andere Umgebung kopieren.
Ich bin nicht sicher, ob diese Klassen auch von anderen Klassen abhängig sind; sie sind es wahrscheinlich nicht, da Annotationen unveränderbare Nur-Daten-Objekte sind. Wenn die Klasse auch Methoden hat, können Sie die Annotationsquellen ohne die Methoden (d. H. Nur die Felder) für die Verwendung in der anderen Umgebung neu kompilieren (mit derselben Serialisierungs-ID).
Um in der Lage zu sein, die von Ihnen erwähnten Anmerkungen zu verwenden oder Spring wirklich zu verwenden, damit Sie den Vorteil erhalten, müssen Sie mindestens Spring 2.5.x verwenden, das ist, als sie eingeführt wurden.
Darüber hinaus müssen Anmerkungen nicht im Klassenpfad enthalten sein. Sie werden einfach ignoriert werden. Seit du Frühling 2.0 verwendest, gibt es keinen Code, der nach ihnen "scannen" möchte.
Sie haben immer noch Kompilierungszeitabhängigkeiten von diesen Anmerkungen. Und da Ihre .class-Dateien die Anmerkungen enthalten, würde ich annehmen, dass Sie die .class-Dateien der Annotationen auch auf Ihrem Klassenpfad benötigen würden. Ist das nicht der Fall? –
Nein :) um es zu überprüfen, habe ich gerade getestet. Ich habe ein kleines Projekt mit einem main() erstellt. Die Klasse ist mit MyAnnotation versehen, die ich geschrieben habe. Ich habe es auf der Kommandozeile ausgeführt, dann manuell die .class-Datei für die Annotation gelöscht und erneut ausgeführt. Es funktionierte immer noch. Probieren Sie es selbst aus :) Beachten Sie, dass meine Anmerkung mit @Retention (RetentionPolicy.RUNTIME) selbst notiert wurde. –
Sehr gut zu wissen, tatsächlich ... –
Es wäre nicht Frühling, wenn Sie gezwungen wären, Ihre Klassen direkt davon abhängig zu machen.
Sie können Ihre eigenen Anmerkungen definieren, die den gleichen Zweck erfüllen wie die im Frühling bewährten. I.e. define com.yourcompany .... Komponente usw.
Ich nehme an, dass Sie einen <context:component-scan .../>
irgendwo in Ihrem Frühling Config verwenden. Fügen Sie einfach use-default-filters="false"
hinzu und definieren Sie Ihren eigenen Filter, der Ihren Anmerkungen entspricht.
Suchen Sie nach den PostProcessors, die tatsächlich die Grunt-Arbeit erledigen.Sie können so konfiguriert werden, dass sie einen alternativen Satz von Anmerkungen verwenden. @Repository
wird durch PersistenceExceptionTranslationPostProcessor
untersucht. Dieser PostProcessor kann so konfiguriert werden, dass er Ihr Äquivalent zur Annotation verwendet.
- 1. Abhängigkeit von Classpath fehlt
- 2. in Abhängigkeit von EL
- 3. Abhängigkeit Visualisierung von Klassen
- 4. Wie bekomme ich eine Abhängigkeit von einer anderen Abhängigkeit?
- 5. Wie man Abhängigkeit von Projekt() Abhängigkeit in Gradle ausschließt
- 6. Maven - Abhängigkeit von Artefaktquelle hinzufügen
- 7. Abhängigkeit von Maven und db4o
- 8. Kreis Abhängigkeit von Knockout berechnet
- 9. Standardabweichung in Abhängigkeit von variablen
- 10. Ninject-Abhängigkeit Bindung von xml
- 11. Android-Abhängigkeit von Ressourcen Variablennamen
- 12. Positionstext in Abhängigkeit von Array
- 13. Matplotlib/Abhängigkeit Abhängigkeit Hölle in Anaconda reparieren
- 14. java.lang.NoClassDefFoundError: Gson Abhängigkeit und facebook sdk Abhängigkeit
- 15. Hinzufügen von Abhängigkeit von lokalen Repository - m2e
- 16. Abhängigkeit von Factory oder von erstelltem Objekt
- 17. Entfernen von JSX Abhängigkeit reagieren von browser.js
- 18. Verwenden Abhängigkeit in Basisklasse ohne diese Abhängigkeit
- 19. Abhängigkeit Konfigurationen
- 20. Knotenmodul Abhängigkeit
- 21. ListPreference Abhängigkeit
- 22. funktionale Abhängigkeit
- 23. Maven: wie die Abhängigkeit von einer Bibliothek
- 24. C# usercontrol in Abhängigkeit von Benutzerklassenbibliothek
- 25. Verwenden von zwei Versionen einer Cocoapod-Abhängigkeit
- 26. Hinzufügen von ui.bootstrap Abhängigkeit mit Bower
- 27. Wie Include-Datei in Abhängigkeit von Seitenname
- 28. Fehler bei Inject Abhängigkeit von DelegatingFilterProxy mit
- 29. Abhängigkeit von einem lokalen Maven-Projekt?
- 30. Playframework-Einstellungen in Abhängigkeit von der Umgebung
Ich wählte # 2 und es funktioniert gut. –
Danke Sean, das ist gnädig von dir. –