Skip to content

Commit 69cd10b

Browse files
committed
Add AuditingBeanPostProcessor.java
1 parent 3be6d2c commit 69cd10b

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package spring.oldboy.bean_post_processor;
2+
3+
import org.springframework.beans.BeansException;
4+
import org.springframework.beans.factory.config.BeanPostProcessor;
5+
6+
import java.lang.reflect.Proxy;
7+
import java.util.HashMap;
8+
import java.util.Map;
9+
10+
public class AuditingBeanPostProcessor implements BeanPostProcessor {
11+
12+
private final Map<String, Class<?>> auditBeans = new HashMap<>();
13+
14+
@Override
15+
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
16+
/* На этот раз мы отслеживаем аннотированный @Auditing класс */
17+
if (bean.getClass().isAnnotationPresent(Auditing.class)) {
18+
auditBeans.put(beanName, bean.getClass());
19+
}
20+
return bean;
21+
}
22+
23+
@Override
24+
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
25+
Class<?> beanClass = auditBeans.get(beanName);
26+
if (beanClass != null) {
27+
return Proxy.newProxyInstance(beanClass.getClassLoader(), beanClass.getInterfaces(),
28+
/* Функционал фиксирует используемый метод и время работы bean-a */
29+
(proxy, method, args) -> {
30+
System.out.println("Audit method: " + method.getName());
31+
long startTime = System.nanoTime();
32+
try {
33+
return method.invoke(bean, args);
34+
} finally {
35+
System.out.println("Time execution: " + (System.nanoTime() - startTime));
36+
}
37+
});
38+
}
39+
return bean;
40+
}
41+
}

0 commit comments

Comments
 (0)