天天看点

【spring】事务管理之编程式事务

     首先说一下编程式事务和声明式事务的区别:

编程式事务允许用户在代码中精确定义事务的边界,而声明式事务(基于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;
	}

	
	
}
           

       接下来我们说声明式编程。