(1)TransactionTemplate的示例代码:
public class TransactionTemplate extends DefaultTransactionDefinition implements InitializingBean{
..........
//进行事务处理的骨架,指明事务处理的顺序
public Object execute(TransactionCallback action)throws TransactionException{
TransactionStatus status=this.transactionManager.getTransaction(this);
Object result=null;
try{
result=action.doInTransaction(status);
}catch(RuntimeException ex){
rollbackOnException(status,ex);
throw ex;
}
catch(Error err){
rollbackOnException(status,err);
throw err;
}
this.transactionManager.commit(status);
return result;
}
//事务处理回调时调用
private void rollbackOnException(TransactionStatus status,Throwable ex)throws TransactionException{
try{
}catch(RuntimeException ex2){
throw ex2;
}
catch(Error err){
throw err;
}
}
说明: ..........
//进行事务处理的骨架,指明事务处理的顺序
public Object execute(TransactionCallback action)throws TransactionException{
TransactionStatus status=this.transactionManager.getTransaction(this);
Object result=null;
try{
result=action.doInTransaction(status);
}catch(RuntimeException ex){
rollbackOnException(status,ex);
throw ex;
}
catch(Error err){
rollbackOnException(status,err);
throw err;
}
this.transactionManager.commit(status);
return result;
}
//事务处理回调时调用
private void rollbackOnException(TransactionStatus status,Throwable ex)throws TransactionException{
try{
}catch(RuntimeException ex2){
throw ex2;
}
catch(Error err){
throw err;
}
}
}
这里TransactionTemplate 没有使用抽象类,在它的execute()方法里定义事务处理的骨架代码.但execute()方法的TransactionCallback参数却是个接口,在这接口中定义了doInTransaction()方法
(2)
//********TransactionCallback.java*****
public interface TransactionCallback{
Object doInTransaction(TransactionStatus status);
(3)只要实现TransactionCallback接口,并在doInTransaction()方法里编写具体要进行的事务处理的代码就可以 了. public interface TransactionCallback{
Object doInTransaction(TransactionStatus status);
}
............
..........
..
..
//事务处理方法
public int create(String s){
TransactionTemplate transactionTemplate=new TransactionTemplate(transactionManager);
Object result=transactionTemplate.execute(
new TransactionCallback(){
public Object doInTransaction(TransactionStatus status)
{
//执行新增操作....
......
//返回值
result resultO;
}
});
}
public int create(String s){
TransactionTemplate transactionTemplate=new TransactionTemplate(transactionManager);
Object result=transactionTemplate.execute(
new TransactionCallback(){
public Object doInTransaction(TransactionStatus status)
{
//执行新增操作....
......
//返回值
result resultO;
}
});
}