0 Tage Serie
java / expert
Snippet

Benutzerdefinierte Annotationsverarbeitung mit BeanPostProcessor

BeanPostProcessoren ermöglichen die benutzerdefinierte Modifikation neuer Bean-Instanzen. Dieses Experten-Pattern wird verwendet, um Beans in Proxys zu kapseln, zusätzliches Verhalten zu injizieren oder Validierungen durchzuführen, nachdem der Spring-Container die Bean-Eigenschaften vollständig initialisiert hat.

snippet.java
java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Component
public class LoggingBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) {
if (bean.getClass().isAnnotationPresent(LogExecution.class)) {
return Proxy.newProxyInstance(
bean.getClass().getClassLoader(),
bean.getClass().getInterfaces(),
(proxy, method, args) -> {
System.out.println("Executing: " + method.getName());
return method.invoke(bean, args);
});
}
return bean;
}
}
spring
Erklärung
1
public Object postProcessAfterInitialization(Object bean, String beanName)
Hook, der von Spring aufgerufen wird, nachdem eine Bean vollständig initialisiert und ihre Abhängigkeiten injiziert wurden.
2
return Proxy.newProxyInstance(...)
Kapselt die ursprüngliche Bean in einem dynamischen Proxy, um Methodenaufrufe für querschnittliche Belange abzufangen.