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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Componentpublic class LoggingBeanPostProcessor implements BeanPostProcessor {@Overridepublic 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.