[go: up one dir, main page]

0% fanden dieses Dokument nützlich (0 Abstimmungen)
19 Ansichten10 Seiten

Eva 04

Hochgeladen von

satanovamunira04
Copyright
© © All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als PDF, TXT herunterladen oder online auf Scribd lesen
0% fanden dieses Dokument nützlich (0 Abstimmungen)
19 Ansichten10 Seiten

Eva 04

Hochgeladen von

satanovamunira04
Copyright
© © All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als PDF, TXT herunterladen oder online auf Scribd lesen
Sie sind auf Seite 1/ 10

Kapitel 4

Ein Blick hinter die Kulissen von Dependency Injection


Modul PTI06780
Entwicklung verteilter Anwendungen
Prof. W. Golubski
24.10.2024
Dependency Injection – Setter Injection
Wenn nur die Constructor Injection eine gute Testbarkeit gewährleistet, warum sollte man die beiden
Alternativen (Setter- und Field Injection) benutzen wollen? Und falls man sie benutzt, wie würden dann die
Testmöglichkeiten aussehen?
Setter-Injection ist nützlich, wenn Abhängigkeiten optional oder zur Laufzeit änderbar sind.
Field-Injection wird verwendet, um Boilerplate-Code zu vermeiden, ist jedoch schwerer zu testen.
Beispiel Setter-Injection
eva04p4howtodi

2 Entwicklung verteilter Anwendungen (Kap. 4) - WS2024/25 - Prof. W. Golubski


Field Injection in Spring Boot 3
Field Injection ist nicht ratsam. Was hat sich verändert, dass man Field Injection nicht benutzen soll?
Field Injection existierte schon in Spring Boot 2, jedoch wurde Constructor Injection seit Spring 4 stärker
gefördert.
Field Injection führt zu schlechter Wartbarkeit und Testbarkeit.
versteckten Abhängigkeiten, erschwert das Refactoring und führt zu schwerer testbarem Code.
Die Testbarkeit leidet, weil die Abhängigkeiten nicht direkt erreichbar sind, und es kann leicht zu
unerwarteten Fehlern kommen, wenn Abhängigkeiten nicht explizit übergeben werden.
Constructor Injection ist sicherer und fördert explizite Abhängigkeitsverwaltung.
verbessert die Wartbarkeit, da Abhängigkeiten sofort ersichtlich sind, und vereinfacht Unit-Tests durch
leichtes Mocking der Abhängigkeiten.
Es fördert robuste und sichere Software, indem es sicherstellt, dass alle Abhängigkeiten zur Zeit der
Konstruktion verfügbar sind und nicht nachträglich geändert werden können.
3 Entwicklung verteilter Anwendungen (Kap. 4) - WS2024/25 - Prof. W. Golubski
Custom Scopes – Demo
Wie kann man einen Scope selbst definieren und implementieren?
Um einen eigenen Scope zu erstellen, implementiert man das Scope -Interface und registriert es über
CustomScopeConfigurer .

Anwendungsfall: Beans, die Status in bestimmten Kontexten über mehrere Anfragen hinweg speichern
@Configuration
public class ScopeConfig {
@Bean public CustomScopeConfigurer customScopeConfigurer() {
CustomScopeConfigurer configurer = new CustomScopeConfigurer();
configurer.addScope("thread", new SimpleThreadScope());
return configurer;
}
@Bean @Scope("thread")
public MyBean myBean() {
return new MyBean();
}
}

4 Entwicklung verteilter Anwendungen (Kap. 4) - WS2024/25 - Prof. W. Golubski


Circular Dependencies – Demo
Wie löst Spring das Problem von zirkulären Abhängigkeiten zwischen Beans, und welche Möglichkeiten
gibt es, dieses Problem zu vermeiden?
Zirkuläre Abhängigkeiten können durch Verwendung von @Lazy gelöst werden, Initialisierung verzögert.
Vermeidung: Constructor Injection und Service-Fassaden, um zirkuläre Abhängigkeiten zu verhindern.
Beispiel

5 Entwicklung verteilter Anwendungen (Kap. 4) - WS2024/25 - Prof. W. Golubski


Special Themes
Wie legt man in Spring die Sitzungsdauer (Session Timeout) fest, wenn man @SessionScope verwendet?
Session Timeout kann in der application.properties festgelegt werden:
server.servlet.session.timeout=30m

Diese Konfiguration funktioniert in Spring Boot 2 und 3.


Alternativ kann der Timeout programmgesteuert in der WebMvcConfigurer -Klasse festgelegt werden.
Gibt es eine Möglichkeit, Objekte, welche man selbst mit new instanziiert hat, von Spring verwalten zu
lassen?
Ja, durch Verwendung der @Configurable Annotation und Aktivierung von AspectJ-Proxies kann Spring
manuell erzeugte Objekte verwalten.
Alternative Methode: Beans manuell in den ApplicationContext zur Laufzeit registrieren:

6 Entwicklung verteilter Anwendungen (Kap. 4) - WS2024/25 - Prof. W. Golubski


InitializingBean und DisposableBean – Beispiele
Wozu und wann werden diese Interfaces verwendet?
InitializingBean wird nach der Instanziierung der Bean zur Initialisierung genutzt.

DisposableBean wird vor der Zerstörung der Bean verwendet, um Ressourcen freizugeben.

@Component
public class MyBean implements InitializingBean, DisposableBean {

@Override
public void afterPropertiesSet() {
System.out.println("Bean initialized");
}

@Override
public void destroy() {
System.out.println("Bean destroyed");
}
}

7 Entwicklung verteilter Anwendungen (Kap. 4) - WS2024/25 - Prof. W. Golubski


Prototype und Singleton Kombination – Demo
Kann man Prototype und Singleton Beans miteinander kombinieren? Wenn ja, wie?
Ja, ein Singleton kann eine Prototype Bean injizieren. Jedes Mal, wenn die Prototype Bean aufgerufen wird,
wird eine neue Instanz erzeugt.
eva04p5scopes

8 Entwicklung verteilter Anwendungen (Kap. 4) - WS2024/25 - Prof. W. Golubski


Lifecycle Hooks
Wann wird man mal spezifische Änderungen im Lebenszyklus vornehmen? Welche Gefahren können bei
Hooking entstehen?
Änderungen im Lebenszyklus werden oft für das Caching, das Ressourcen-Management oder für
sicherheitskritische Aufgaben vorgenommen.
Gefahren: Unsachgemäßes Hooking kann zu Deadlocks führen oder unvorhergesehene Zustände erzeugen,
wenn der Lebenszyklus nicht korrekt gesteuert wird.

9 Entwicklung verteilter Anwendungen (Kap. 4) - WS2024/25 - Prof. W. Golubski


Abschlussdiskussion
Bisher
BeanFactory, ApplicationContext, WebApplicationContext, DispatcherServlet, BeanPostProcessor,
Singleton-, Prototype-, Request-Scope, @Autowired, @Qualifier, @Scope, @Configuration,
@EnableAutoConfiguration, @ComponentScan, @PreDestroy, @PostConstruct, Dependency Injection,
IoC, Bean-Lebenszyklus, Scope, Kontext, Field Injection, Setter Injection, Constructor Injection
Fragen???
Vorschau
Kapitel 5: Datenmodell, Persistenz, Spring Data JPA, H2-Datenbank, POJO, Entity, Serializable,
Assoziationen, Multiplizitäten, Direktionalität, Navigierbarkeit, ORM, JPA, @OneToOne, @OneToMany,
@ManyToOne, @ManyToMany
Kapitel 6: Kaskadierung, Löschen von Objekten und Daten, Aufzählungen, Queries, Vererbung, Eingebettete
Objekte
10 Entwicklung verteilter Anwendungen (Kap. 4) - WS2024/25 - Prof. W. Golubski

Das könnte Ihnen auch gefallen