Wofür wird die Annotation @Transactional in Spring verwendet?
@Transactional
Sie steuert das Transaktionsmanagement in Spring. Methoden oder Klassen mit @Transactional laufen in einer Datenbanktransaktion.
Was bewirkt @Transactional konkret?
Startet automatisch eine Transaktion beim Methodenaufruf
Führt Commit nach erfolgreichem Abschluss aus
Führt Rollback bei Ausnahmen durch (standardmäßig bei RuntimeException und Error)
RuntimeException
Error
Was bedeutet Isolation im Transaktionsmanagement?
Der Isolationsgrad bestimmt, wie stark parallele Transaktionen voneinander abgeschottet sind, um Probleme wie Dirty Reads, Non-Repeatable Reads oder Phantom Reads zu vermeiden.
Was bedeutet @Transactional(readOnly = true) in Spring, und wann wird es verwendet?
@Transactional(readOnly = true)
🔹 Bedeutung:
Signalisiert, dass keine Schreiboperationen stattfinden
Optimiert Performance:
Hibernate kann das Dirty-Checking deaktivieren
DB kann evtl. leichtere Locks setzen oder Caching nutzen
Kann z. B. bei Reporting, Suche, Abfragen verwendet werden
🔹 Wichtig:
Nur eine Lese-Absicht wird ausgedrückt – es verhindert nicht aktiv das Schreiben
Ohne @Transactional(readOnly = true):
Es wird gar keine Transaktion gestartet → Lazy-Loading kann fehlschlagen.
Performance kann schlechter sein.
Keine Absicherung gegen versehentliches Schreiben (z. B. durch Entity-Manipulation ohne Absicht).
Warum @Transactional(readOnly = true) verwenden? → Für konsistente Leseoperationen mit Transaktion, bessere Performance, und klare Trennung von Lese-/Schreiblogik.
Was macht die Annotation @DirtiesContext in Spring Tests?
@DirtiesContext
Sie markiert den Spring ApplicationContext als "verschmutzt" (dirty), sodass er nach dem Test neu erstellt wird. Das verhindert Seiteneffekte zwischen Tests, ist aber langsamer.
Welche Wirkung hat @DirtiesContext(classMode = AFTER_EACH_TEST_METHOD)?
@DirtiesContext(classMode = AFTER_EACH_TEST_METHOD)
Nach jedem Testmethodenlauf wird der ApplicationContext verworfen und für den nächsten Test frisch aufgebaut.
Wann sollte man AFTER_EACH_TEST_METHOD einsetzen?
AFTER_EACH_TEST_METHOD
Wenn Tests starke Nebeneffekte auf den ApplicationContext haben (z. B. Datenbankzustände, Bean-Modifikationen), die sich nicht leicht zurücksetzen lassen.
Nachteile von @DirtiesContext(AFTER_EACH_TEST_METHOD)?
@DirtiesContext(AFTER_EACH_TEST_METHOD)
Sehr langsame Testausführung, da der gesamte ApplicationContext jedes Mal neu aufgebaut wird.
Sollte nur verwendet werden, wenn keine bessere Isolation möglich ist (z. B. durch Transaktionen oder Testdaten-Reset).
Was macht @DirtiesContext ohne Angabe von classMode?
classMode
Es wird der Standart Wwert genommen.
Standartwert ist AFTER_CLASS.
Ist spring-boot-starter-parent dasselbe wie Spring Boot?
spring-boot-starter-parent
Nein.
spring-boot-starter-parent ist kein Spring Boot selbst, sondern ein Maven-Parent-POM, das Standardkonfigurationen und Dependency-Management für Spring Boot-Projekte bereitstellt.
Kann man Spring Boot ohne spring-boot-starter-parent nutzen?
Ja,
aber dann muss man die Versionen und Plugin-Konfigurationen selbst verwalten.
Mit spring-boot-dependencies (als dependencyManagement) kann man ein eigenes Parent-POM nutzen.
spring-boot-dependencies
dependencyManagement
Was ist der Unterschied zwischen spring-boot-starter-parent und Spring Boot Startern (z. B. spring-boot-starter-web)?
spring-boot-starter-web
spring-boot-starter-parent = Parent-POM für Maven-Projekte (Konfiguration + Dependency-Management).
Spring Boot Starter (z. B. spring-boot-starter-web) = Sammlungen von Bibliotheken, die typische Funktionalitäten bereitstellen.
Wo gibt man an, welche Spring Boot Version im Maven-Projekt verwendet wird?
Mit spring-boot-starter-parent genau dort.
Ohne, dann bei spring-boot-dependencies.
Was ist eine Bean in Spring?
Ein Objekt, das von Spring verwaltet wird (Lifecycle, Abhängigkeiten, Konfiguration). Beans sind Teil des ApplicationContext.
Wie erstellt man in Spring Boot eine Bean?
Mit @Component, @Service, @Repository, @Controller (automatische Erkennung durch Component Scan).
@Component
@Service
@Repository
@Controller
Oder durch @Bean in einer @Configuration-Klasse.
@Bean
@Configuration
Was ist der Unterschied zwischen @Component und @Bean?
@Component: Automatische Bean-Erkennung durch Classpath-Scanning.
@Bean: Explizite Bean-Definition in einer @Configuration-Klasse.
Was ist der Standard-Scope einer Spring Bean?
Singleton – es gibt nur eine Instanz pro ApplicationContext.
Singleton
Welche Bean-Scopes gibt es in Spring Boot?
singleton (Standard)
singleton
prototype (neue Instanz bei jedem Zugriff)
prototype
web-bezogen: request, session, application, websocket
request
session
application
websocket
Wie injiziert man eine Bean in Spring Boot?
Über Konstruktor-Injektion (empfohlen)
Über Feld-Injektion (@Autowired)
@Autowired
Über Setter-Injektion
Wie kann man mehrere Beans desselben Typs unterscheiden?
Mit @Qualifier("beanName")
@Qualifier("beanName")
Mit @Primary (legt die Standard-Bean fest)
@Primary
Was macht @ConfigurationProperties?
@ConfigurationProperties
Bindet Werte aus application.properties oder application.yml an ein Bean-Objekt (stark typisiert, mit Getter/Setter).
application.properties
application.yml
Was bewirkt @Lazy bei Beans in Spring Boot?
@Lazy
Beans werden nicht sofort beim Start des ApplicationContext erstellt, sondern erst bei der ersten Verwendung (Lazy Initialization).
Spart Ressourcen beim Start, ist aber langsamer beim ersten Zugriff.
Kann auf Klassen (@Component, @Service, …) oder einzelne Bean-Definitionen (@Bean) angewendet werden.
Wann sollte man @Lazy bei Beans nutzen?
Wenn eine Bean erst bei Bedarf und nicht direkt beim ApplicationContext-Start erstellt werden soll (z. B. für Performance oder wenn Abhängigkeiten optional sind).
Wie kann man den Lifecycle einer Bean beeinflussen?
Mit @PostConstruct und @PreDestroy
@PostConstruct
@PreDestroy
Über Interfaces wie InitializingBean, DisposableBean
InitializingBean
DisposableBean
Mit @Bean(initMethod = "...", destroyMethod = "...")
@Bean(initMethod = "...", destroyMethod = "...")
Was macht eine Klasse mit @Configuration in Spring Boot?
Sie markiert die Klasse als Konfigurationsklasse, die Beans mit @Bean-Methoden definiert. Sie ersetzt XML-Konfiguration.
Kann eine @Configuration-Klasse auch @Component sein?
Ja, @Configuration ist selbst mit @Component annotiert. Sie wird also auch durch Component Scanning gefunden.
Last changed25 days ago