首先说一下编程式事务和声明式事务的区别:
编程式事务允许用户在代码中精确定义事务的边界,而声明式事务(基于AOP)有助于用户将操作和事务规则进行解耦。
编程式事务侵入业务代码中,但是提供了更加详细的事务管理,而声明式事务由于基于AOP,所以能够起到事务管理的作用,又不影响业务代码的具体实现。
编程式事务:
1、TransactionTemplate
他是线程安全的,因为多个业务类中共享TransactionTemplate实例进行事务管理。TransactionTemplate拥有多个设置事务属性的方法。
setTransactionManager 设置事务管理器,也是通过AOP主动注入的
execute 在TransactionCallBack回调接口中定义需要以事务方法组织的数据访问逻辑。
2、PlatformTransactionManager 该接口一共有三个方法。
请见下面的代码:
package com.smart.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallbackWithoutResult;
import org.springframework.transaction.support.TransactionTemplate;
import com.smart.dao.ForumDao;
import com.smart.domain.Forum;
@Service
public class ForumService1 {
public ForumDao forumDao;
public TransactionTemplate template;
public void addForum(final Forum forum) {
template.execute(new TransactionCallbackWithoutResult() {
protected void doInTransactionWithoutResult(TransactionStatus status) {
forumDao.addForum(forum);
}
});
}
@Autowired
public void setForumDao(ForumDao forumDao) {
this.forumDao = forumDao;
}
@Autowired
public void setTemplate(TransactionTemplate template) {
this.template = template;
}
}
接下来我们说声明式编程。