同类中方法调用事务不起作用的原因及处理

类X中的方法A 调用方法 B, A 方法没有设置事务, B 方法设置了事务, 但经过测试 B的事务并没有生效。
Spring在创建一个Bean之后,对其包装并生成动态代理对象都是后置的举动,故会先生成真实类的实例bean,再动态创建动态代理bean,在动态代理bean中,会持有真实的bean的实例。
而我们在类中的方法直接调用, 实际上是真实类的实例调用, 并不是代理的bean的实例。
解决方案:

  1. 通过获取AOP代理实例来执行方法

public void FunctionA implement ApplicationContextWare
{
pubilc ApplicationContext ctx;

public FunctionA myBean()
{
    ctx.getBean("functionA", functionA.class);
}

public void tranactionFun()
{
    //....DB operation
}

public void invoiceFun()
{
    myBean().tranactionFun();
}

}

  1. 其它方案请参考 http://www.sohu.com/a/232046334_355142, 其中说的几套方案步骤很详细
posted @ 2018-12-20 15:44  周末宅2天  阅读(1000)  评论(0编辑  收藏  举报