【发布时间】:2022-01-08 01:57:36
【问题描述】:
我正在使用 BeanPostProcessor,它在我的 Service 方法完成后执行一些代码。
但我的Service 也是@Transactional。
在这些方法中,这个“触发器”是否在事务结束之前或之后执行?
@Component
public class MethodBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
if (findAnnotation(bean.getClass(), Service.class) != null) {
var factory = new ProxyFactory(bean);
factory.setProxyTargetClass(true);
factory.addAdvice((AfterReturningAdvice) (returnValue, method, args, target) -> {
if (method.isAnnotationPresent(Refreshable.class)) {
var refreshableDto = (RefreshableDto) returnValue;
if (refreshableDto != null) {
refreshableDto.copyId();
}
}
});
factory.setExposeProxy(true);
return factory.getProxy();
}
return bean;
}
}
它工作正常,所以我可以假设它在交易后就可以正常工作,但我不确定。 文档中有什么地方可以找到这些信息吗?
【问题讨论】:
标签: java spring proxy spring-aop spring-transactions