【问题标题】:How can I programmatically create a transactional proxy?如何以编程方式创建事务代理?
【发布时间】:2011-09-20 11:53:53
【问题描述】:

我用

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

并使用自动装配它

ctx.getAutowireCapableBeanFactory().autowireBean(instance);

bean 的 run 方法由 ThreadPoolTaskExecuter 执行,并带有注释 @Transactional 注释在这种情况下无效。由于出现延迟加载问题。我需要在这里进行交易。

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

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

【问题讨论】:

  • 你不能将Type定义为原型bean并从上下文中查找吗?这将是让它发挥作用的最简单方法。

标签: java spring transactions


【解决方案1】:

如果你从上下文中apply BeanPostProcessors,你应该得到正确的代理:

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

【讨论】:

    【解决方案2】:

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

    如果你想代理一个对象,你可能需要的类是org.springframework.transaction.interceptor.TransactionProxyFactoryBean。设置一个实例并调用getObject() 来获取您的代理类。

    【讨论】:

      猜你喜欢
      • 2019-01-31
      • 2018-09-08
      • 2014-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-12
      • 1970-01-01
      相关资源
      最近更新 更多