java / expert
Snippet
Fortgeschrittene Bean-Metadaten-Manipulation via BeanFactoryPostProcessor
Der BeanFactoryPostProcessor ermöglicht es, Bean-Definitionen abzufangen und zu modifizieren, bevor die Objekte überhaupt instanziiert werden, was übergreifende Änderungen wie Scope-Überschreibungen oder dynamische Eigenschaftsinjektion ermöglicht.
snippet.java
1
2
3
4
5
6
7
8
9
10
11
12
@Componentpublic class AuditMetadataProcessor implements BeanFactoryPostProcessor {@Overridepublic void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) {for (String beanName : beanFactory.getBeanDefinitionNames()) {BeanDefinition bd = beanFactory.getBeanDefinition(beanName);if (bd.getBeanClassName() != null && bd.getBeanClassName().contains("Service")) {bd.setScope(BeanDefinition.SCOPE_PROTOTYPE);}}}}
spring
Erklärung
1
implements BeanFactoryPostProcessor
Interface zur Modifikation der internen Bean-Definitionen des Application Contexts.
2
postProcessBeanFactory(...)
Callback, der ausgeführt wird, nachdem alle Bean-Definitionen geladen sind, aber vor der Instanziierung.
3
bd.setScope(BeanDefinition.SCOPE_PROTOTYPE)
Dynamisches Ändern des Lifecycle-Scopes spezifischer Beans zur Laufzeit.