개발/spring

AOP를 통한 트랜잭션 처리

issac 2021. 2. 27. 19:18
  • pom.xml
		<!-- aop aspectj 문법 -->

		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjrt</artifactId>
			<version>${org.aspectj-version}</version>
		</dependency>

		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjweaver</artifactId>
			<version>${org.aspectj-version}</version>
		</dependency>

 

  • root-context.xml 
	<!-- aop 자동 프록시 설정 -->
	<aop:aspectj-autoproxy/>
    
    <!-- AOP xml방식으로 환경설정  -->
	<aop:config/>

 

  • 사용 예)
package com.hungry.spring.member.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.hungry.spring.member.dao.MemberDAO;
import com.hungry.spring.member.vo.MemberVO;

@Service("memberService")
public class MemberServiceImpl implements MemberService {

	@Autowired
	private MemberDAO memberDao;
	
	
	@Override
	public MemberVO id_check(String id) {
		return this.memberDao.id_check(id);
	}

	@Override
	public void insertMember(MemberVO m) {
		this.memberDao.insertMember(m);
	}

	@Override
	public MemberVO login_check(String m_id) {
		return this.memberDao.login_check(m_id);
	}

	@Override
	public List<MemberVO> findId(MemberVO m) {
		return this.memberDao.findId(m);
	}

	//AOP를 통한 트랜잭션 적용 - 반드시 조회가 완료된 회원만 비밀번호변경이 이루어 져야함.
	@Transactional
	@Override
	public MemberVO findPw(MemberVO m) {
		this.memberDao.updatePw(m);//임시비밀번호 변경
		return this.memberDao.findPw(m);//내용 가져오기
	}

}

 

Service Impl에서 사용하며 Dao로 넘겨주기전에 @Transactional 로 선언해준다. 

DAO로 넘겨주는 updatePw()와 findPw() 둘중 하나라도 에러가 생기면 실행되지 않는다.