如何以编程方式创建事务代理?

时间:2011-09-20 11:53:54

标签: java spring transactions

我用

创建了一个bean实例
Type instance = new Type(); 

并使用

自动启动它
ctx.getAutowireCapableBeanFactory().autowireBean(instance);

beans run方法由ThreadPoolTaskExecuter执行,并使用注释进行注释 @Transactional注释,在这种情况下无效。由于发生延迟加载问题。我需要一个交易。

如何创建事务代理并包装我的实例?

除了手动使用事务管理器之外还有其他方法吗?

2 个答案:

答案 0 :(得分:4)

如果你从上下文apply BeanPostProcessors获得了正确的代理:

instance = ctx.getAutowireCapableBeanFactory().applyBeanPostProcessorsAfterInitialization(instance);

答案 1 :(得分:3)

您当然可以手动创建PlatformTransactionManager子类并使用其方法来创建和提交或回滚事务。

如果要代理对象,则可能需要的类为org.springframework.transaction.interceptor.TransactionProxyFactoryBean。设置该实例并调用getObject()以获取您的代理类。