同类中方法调用事务不起作用的原因及处理
类X中的方法A 调用方法 B, A 方法没有设置事务, B 方法设置了事务, 但经过测试 B的事务并没有生效。
Spring在创建一个Bean之后,对其包装并生成动态代理对象都是后置的举动,故会先生成真实类的实例bean,再动态创建动态代理bean,在动态代理bean中,会持有真实的bean的实例。
而我们在类中的方法直接调用, 实际上是真实类的实例调用, 并不是代理的bean的实例。
解决方案:
- 通过获取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();
}
}
- 其它方案请参考 http://www.sohu.com/a/232046334_355142, 其中说的几套方案步骤很详细