Skip to content

Commit 582690d

Browse files
committed
Add MyOwnTransactionBeanPostProcessor.java
1 parent 71d137c commit 582690d

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package spring.oldboy.bean_post_processor;
2+
3+
/* Пример самописного пост-процессора с основным ...AfterInitialization методом */
4+
5+
import org.springframework.beans.BeansException;
6+
import org.springframework.beans.factory.config.BeanPostProcessor;
7+
import org.springframework.stereotype.Component;
8+
9+
import java.lang.reflect.Proxy;
10+
import java.util.HashMap;
11+
import java.util.Map;
12+
13+
@Component
14+
public class MyOwnTransactionBeanPostProcessor implements BeanPostProcessor {
15+
16+
private final Map<String, Class<?>> transactionBeans = new HashMap<>();
17+
18+
@Override
19+
public Object postProcessBeforeInitialization(Object bean, String beanName)
20+
throws BeansException {
21+
if (bean.getClass().isAnnotationPresent(MyOwnTransaction.class)) {
22+
transactionBeans.put(beanName, bean.getClass());
23+
}
24+
return bean;
25+
}
26+
27+
@Override
28+
public Object postProcessAfterInitialization(Object bean, String beanName)
29+
throws BeansException {
30+
Class<?> beanClass = transactionBeans.get(beanName);
31+
if (beanClass != null) {
32+
return Proxy.newProxyInstance(beanClass.getClassLoader(), beanClass.getInterfaces(),
33+
(proxy, method, args) -> {
34+
/* Эмулируем открытие транзакции */
35+
System.out.println("Open transaction");
36+
try {
37+
return method.invoke(bean, args);
38+
} finally {
39+
/* Эмулируем закрытие транзакции */
40+
System.out.println("Close transaction");
41+
}
42+
});
43+
}
44+
return bean;
45+
}
46+
}

0 commit comments

Comments
 (0)