请教spring的事务控制

1:spring的事务配置

tx:attributes








/tx:attributes
/tx:advice

<aop:config>  
    <aop:pointcut id="interceptorPointCuts"  
    expression="execution(public * com.*.*.bl.*.*.*(..))" />  
    <aop:advisor advice-ref="txAdvice"  pointcut-ref="interceptorPointCuts" />  
</aop:config> 

2:业务层的代码

private TestDao testDao;
public void saveData1(long id)
{
delData2(id);
testDao.addA1(A1对象);

}

private void delData2(long id)
{
testDao.deleteA1ById(id);
}

3:控制层action调用
private TestSverice testSvercie;
testSvercie.saveData1(id);

请问:1:
业务层的业务控制:
saveData1和delData2是不是共用一个事务

2:如果saveData1和delData2不是共用一个事务,当特定的情况下,如果saveData1和delData2获取的不是同一个连接,导致testDao.deleteA1ById(id);的操作无法提交,而testDao.addA1(A1对象); 则一直等待。业务delData2是私有方法,没有事务控制,而此刻他的数据库连接又是一个独立的。这样就导致锁表。
如果delData2的数据库连接和saveData1的数据库连接是同一个,则会被提交或回滚。

现在的问题是:action调用testSvercie.saveData1(id);会在非常底概率下发生private void delData2(long id)
{
testDao.deleteA1ById(id);
}
这个方法的事务不提交,导致死锁。

请各位帮忙分析一下真正的原因。谢谢。

1、不是一个事务。
2、配置好像有点问题,execution(* com.*.*.bl.*.*.*(..)),我觉得去掉public就会正常的。或者直接像下面那样写不行么?
public void saveData1(long id)
{
testDao.deleteA1ById(id);

testDao.addA1(A1对象);

}