java / expert
Snippet
Implementierung eines benutzerdefinierten Thread-Local Bean-Scopes
Benutzerdefinierte Scopes ermöglichen die Erweiterung von Springs Bean-Management auf spezifische Lebenszyklen. Ein ThreadScope stellt sicher, dass eine einzelne Instanz einer Bean innerhalb eines Threads geteilt, aber von anderen isoliert wird, nützlich für komplexe Hintergrundjob-Verarbeitung.
snippet.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class ThreadScope implements Scope {private final ThreadLocal<Map<String, Object>> threadLocalScope =ThreadLocal.withInitial(HashMap::new);@Overridepublic Object get(String name, ObjectFactory<?> objectFactory) {return threadLocalScope.get().computeIfAbsent(name, k -> objectFactory.getObject());}@Overridepublic Object remove(String name) {return threadLocalScope.get().remove(name);}@Overridepublic void registerDestructionCallback(String name, Runnable callback) {// Logic for cleaning up resources when thread finishes}}
spring
Erklärung
1
public class ThreadScope implements Scope
Definiert eine neue Strategie dafür, wie Spring Bean-Instanzen verwaltet und abruft.
2
ThreadLocal.withInitial(HashMap::new);
Nutzt ThreadLocal-Speicher, um für jeden Thread ein separates Bean-Registry zu führen.
3
objectFactory.getObject()
Erzeugt eine neue Bean-Instanz, falls diese noch nicht im Registry des aktuellen Threads existiert.