Umfassender Leitfaden zu Spring Framework und Spring Boot Annotationen

Das Spring Framework und Spring Boot sind zentrale Säulen in der Java-Entwicklung. Sie bieten eine Vielzahl von Annotationen, die es Entwicklern ermöglichen, robuste und effiziente Anwendungen zu erstellen. Dieser Leitfaden bietet einen detaillierten Überblick über die verschiedenen Annotationen und ihre Anwendungen.

Core Spring Annotationen

  • @Bean: Kennzeichnet eine Methode, die eine vom Spring IoC-Container verwaltete Bean erzeugt.
  • @Component: Markiert eine Klasse als Bean, die durch die Komponentensuche gefunden und in den Anwendungskontext geladen wird.
  • @Controller: Markiert eine Klasse als Bean für Spring MVC, die Anfrage-Handler enthält.
  • @RestController: Markiert eine Klasse als @Controller-Bean und fügt @ResponseBody hinzu, um die Rückgabeergebnisse als Nachrichten zu serialisieren.
  • @Configuration: Markiert eine Klasse als Java-Konfiguration, die Beans definiert.
  • @Service: Markiert eine Klasse als Bean, die üblicherweise Geschäftslogik enthält.
  • @Repository: Markiert eine Klasse als Bean für den Datenzugriff und fügt eine automatische Umwandlung von SQLException in DataAccessExceptions hinzu.

Bean-Zustand Annotationen

  • @PostConstruct: Wird nach der Abhängigkeitsinjektion ausgeführt, um Initialisierungen durchzuführen.
  • @PreDestroy: Wird vor der Zerstörung des Beans ausgeführt, z. B. beim Herunterfahren der Anwendung.

Konfigurationsannotationen

  • @Import: Importiert eine oder mehrere Java-Konfigurationsklassen.
  • @PropertySource: Gibt den Ort der application.properties-Datei an, um Schlüssel-Wert-Paare zur Spring-Umgebung hinzuzufügen.
  • @Value: Injiziert Werte in annotierte Felder und Parameter.
  • @ComponentScan: Konfiguriert die Komponentensuche für @Component, @Service usw.

Bean-Eigenschaften Annotationen

  • @Lazy: Das annotierte Bean wird bei der ersten Verwendung verzögert initialisiert.
  • @Profile: Beans werden nur initialisiert, wenn die definierten Profile aktiv sind.
  • @Scope: Definiert den Erstellungsbereich des Beans, z. B. prototype, singleton usw.
  • @DependsOn: Definiert explizit eine Abhängigkeit zu anderen Beans in Bezug auf die Erstellungsreihenfolge.
  • @Order: Definiert die Sortierreihenfolge, wenn eine Liste von Beans injiziert wird.
  • @Primary: Das annotierte Bean wird ausgewählt, wenn mehrere Beans für die Autowiring infrage kommen.
  • @Conditional: Das annotierte Bean wird nur erstellt, wenn die Bedingungen erfüllt sind.
    • @ConditionalOnBean: Die Bedingung wird erfüllt, wenn ein oder mehrere spezifizierte Beans im Spring ApplicationContext vorhanden sind. Dies wird häufig verwendet, um die Konfiguration basierend auf der Verfügbarkeit bestimmter Beans anzupassen.
    • @ConditionalOnMissingBean: Im Gegensatz zu @ConditionalOnBean wird diese Bedingung erfüllt, wenn kein Bean des spezifizierten Typs im ApplicationContext vorhanden ist. Dies ist nützlich, um sicherzustellen, dass eine bestimmte Konfiguration nur dann geladen wird, wenn das erforderliche Bean fehlt.
    • @ConditionalOnClass: Diese Annotation prüft die Anwesenheit einer bestimmten Klasse oder Klassen im Klassenpfad. Ist die Klasse vorhanden, wird die Bedingung erfüllt. Dies wird oft verwendet, um Auto-Konfigurationen basierend auf der Verfügbarkeit von Klassen aus externen Bibliotheken zu steuern.
    • @ConditionalOnMissingClass: Das Gegenteil von @ConditionalOnClass, diese Bedingung ist erfüllt, wenn eine bestimmte Klasse nicht im Klassenpfad vorhanden ist. Dies kann verwendet werden, um bestimmte Konfigurationen auszulassen, wenn eine erforderliche Abhängigkeit fehlt.
    • @ConditionalOnProperty: Diese Annotation ermöglicht die Konfiguration basierend auf dem Vorhandensein und dem Wert von Umgebungsvariablen oder Properties. Es ist ein leistungsstarkes Werkzeug, um Konfigurationen in verschiedenen Umgebungen zu steuern, wie z.B. Entwicklung, Test und Produktion.
    • @ConditionalOnMissingProperty: Ähnlich wie @ConditionalOnProperty, aber die Bedingung ist erfüllt, wenn eine bestimmte Eigenschaft (Property) nicht definiert ist oder einen spezifischen, nicht wahren Wert hat. Dies wird verwendet, um eine Konfiguration nur dann zu laden, wenn eine bestimmte Property nicht gesetzt ist.

Spring Boot-spezifische Annotationen

  • @SpringBootConfiguration: Kennzeichnet eine Spring Boot-Anwendungskonfiguration.
  • @EnableAutoConfiguration: Ermöglicht die automatische Konfiguration des Anwendungskontexts basierend auf dem Klassenpfad.
  • @ConfigurationProperties: Bietet externe Bindung von Schlüssel-Wert-Eigenschaften.
  • @ConstructorBinding: Bindet Eigenschaften mithilfe des Konstruktors anstatt über Setter.
  • @ConfigurationPropertiesScan: Ermöglicht die automatische Erkennung von @ConfigurationProperties-Klassen.
  • @SpringBootApplication: Kombination aus @SpringBootConfiguration, @EnableAutoConfiguration, @ConfigurationPropertiesScan und @ComponentScan.
  • @EntityScan: Konfiguriert Basispakete zum Scannen von Entitätsklassen.
  • @EnableJpaRepositories: Ermöglicht die automatische Konfiguration von JPA-Repositories.

Bean-Injektion Annotationen

  • @Autowired: Beans werden in annotierte Setter, Felder oder Konstruktorparameter injiziert.
  • @Qualifier: Gibt den Namen eines Beans als zusätzliche Bedingung zur Identifizierung eines eindeutigen Kandidaten für das Autowiring an.

Validierungsannotationen

  • @Valid: Kennzeichnet eine Eigenschaft, Methodenparameter oder Rückgabetyp zur Validierung.
  • @Validated: Variante von @Valid, die die Validierung mehrerer Gruppen ermöglicht.

Spring Boot Testannotationen

  • @SpringBootTest: Lädt den gesamten Anwendungskontext für Integrationstests.
  • @WebMvcTest: Lädt nur die Webschicht für Tests.
  • @DataJpaTest: Lädt nur die JPA-Komponenten für Tests.

Transaktionsannotationen

  • @EnableTransactionManagement: Ermöglicht deklarative Transaktionsverwaltung.
  • @Transactional: Methoden, die mit dieser Annotation versehen sind, werden in einer Transaktion ausgeführt.
    • Methoden- und Klassenebene: Wenn es auf Klassenebene angewendet wird, werden alle öffentlichen Methoden der Klasse transaktional.
    • Transaktionsmanagement: Bei einer annotierten Methode startet Spring eine neue Transaktion, bevor die Methode ausgeführt wird, und beendet die Transaktion, nachdem die Methode ausgeführt wurde. Dies beinhaltet das Commit oder Rollback der Transaktion, abhängig davon, ob die Ausführung erfolgreich war oder eine Ausnahme ausgelöst wurde.
    • Isolation und Propagation: Durch die Annotation können verschiedene Transaktionseigenschaften wie Isolationsebene und Propagationsverhalten angepasst werden. Die Isolationsebene definiert, wie Transaktionen voneinander isoliert sind, und das Propagationsverhalten bestimmt, wie Transaktionen in Bezug auf bereits laufende Transaktionen gehandhabt werden.
    • Rollback-Regeln: Standardmäßig führt das Werfen einer RuntimeException zu einem Rollback der Transaktion, während geprüfte Ausnahmen (checked exceptions) dies nicht tun.
    • Proxy-basiertes Verhalten: In Spring wird das Transaktionsmanagement oft durch Proxies umgesetzt. Dies bedeutet, dass die Transaktionslogik hinzugefügt wird, wenn ein Objekt durch einen Proxy gekapselt wird. Dies hat Auswirkungen auf die Sichtbarkeit und das Verhalten von transaktionalen Methoden innerhalb derselben Klasse.
    • Datenquellen und Transaktionsmanager: Für JDBC, JPA, Hibernate oder andere Persistenztechnologien können unterschiedliche Transaktionsmanager konfiguriert werden.
    • Spring Boot Konfiguration: In Spring Boot-Anwendungen wird das Transaktionsmanagement oft automatisch konfiguriert. Dennoch kann die Konfiguration durch Angabe eigener Transaktionsmanager oder Anpassung der Transaktionseigenschaften weiter verfeinern werden.

Spring JPA und Hibernate Annotationen

  • @Entity: Markiert eine Klasse als Entität in der Datenbank.
  • @Table: Gibt die Tabelle in der Datenbank an, die der Entität entspricht.
  • @Id: Kennzeichnet ein Feld als Primärschlüssel der Entität.
  • @GeneratedValue: Gibt die Strategie für die Erzeugung der Primärschlüsselwerte an.
  • @Column: Definiert spezifische Eigenschaften einer Spalte in der Datenbanktabelle.
  • @ManyToOne, @OneToMany, @OneToOne, @ManyToMany: Definieren die verschiedenen Arten von Beziehungen zwischen Entitäten.
  • @JoinColumn: Gibt die Spalte für das Joining in Beziehungen an.
  • @Embedded und @Embeddable: Ermöglichen es, eine Klasse als Teil einer anderen Entität zu verwenden.
  • @MappedSuperclass: Ermöglicht das Erben von Eigenschaften in JPA-Entitäten.
  • @Transactional: Gibt an, dass eine Methode oder eine ganze Klasse in einem Transaktionskontext ausgeführt werden soll.

Spring Security Annotationen

  • @EnableWebSecurity: Aktiviert die Web-Sicherheit in einer Spring-Anwendung.
  • @PreAuthorize und @PostAuthorize: Definieren Sicherheitsbedingungen vor bzw. nach der Ausführung einer Methode.
  • @Secured: Schränkt den Zugriff auf Methoden basierend auf Rollen ein.
  • @RolesAllowed: Gibt an, welche Sicherheitsrollen den Zugriff auf eine Methode haben.

Spring AOP Annotationen

  • @Aspect: Markiert eine Klasse als Aspekt für Cross-Cutting-Concerns.
  • @Before, @After, @AfterReturning, @AfterThrowing, @Around: Definieren verschiedene Arten von Ratschlägen (Advices) in AOP.
  • @Pointcut: Definiert einen Pointcut-Expression.
  • @EnableAspectJAutoProxy: Ermöglicht die Unterstützung für Aspekte mit automatischer Proxy-Erzeugung.
 
email senden an Telefon: 07477/7904023   |  0163/3860364