note

Spring AOP XML스키마 기반의 POJO 클래스를 이용한 AOP 구현 본문

JSP/Spring

Spring AOP XML스키마 기반의 POJO 클래스를 이용한 AOP 구현

투한 2012. 3. 2. 11:41










실행화면(Main.java)

WriteArticleService.write(..)시작
WriteArticleServiceImpl.write() 메서드 실행
ArticleDao.insert(..)시작
MySQLArticleDao.insert() 실행
ArticleDao.insert(..)종료
ArticleDao.insert(..)실행시간 : 0ms
WriteArticleService.write(..)종료
WriteArticleService.write(..)실행시간 : 0ms





lib 설정하는 방법 이전 게시물 참고
[JSP/Spring] - Spring 설치 & 셋팅(응용 프로그램) 





Article -> ArticleDao -> MySQLArticleDao에 implements ->











applicationContext.xml




	
	
	
	
	
		
			
				
		
	
	
	
	
		
			
		
	
	
	





공통 관심 사항

				



<aop:aorund> 메서드 호출 이전, 이후, 예외 발생등 모든 시점에 적용가능한 Advice










Main
package madvirus.spring.chap05.aop.pojo;

import madvirus.spring.chap05.board.Article;
import madvirus.spring.chap05.board.service.WriteArticleService;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {
	public static void main(String[] args) {
		String[] configLocations = new String[] { "applicationContext.xml" };
		ApplicationContext context = new ClassPathXmlApplicationContext(
				configLocations);

		WriteArticleService articleService= (WriteArticleService) context.getBean("writeArticleService");

		articleService.write(new Article());
	}
}







ProfilingAdvice
package madvirus.spring.chap05.aop.pojo;

import org.aspectj.lang.ProceedingJoinPoint;

public class ProfilingAdvice {
	public Object trace(ProceedingJoinPoint joinPoint) throws Throwable{
		String signatureString = joinPoint.getSignature().toShortString();

		System.out.println(signatureString +"시작");

		long start = System.currentTimeMillis();

		try{
			Object result =joinPoint.proceed();
			return result;
		}finally{
			long finish = System.currentTimeMillis();
			System.out.println(signatureString +"종료");

			System.out.println(signatureString +"실행시간 : "+(finish - start)+"ms");
		}
	}
}







Article
package madvirus.spring.chap05.board;

import madvirus.spring.chap05.board.dao.ArticleDao;

public class Article {
 
	private int id;
	private ArticleDao articleDao;

	public Article() {
	}

	public Article(int id) {
		this.id = id;
	}

	public int getId() {
		return id;
	}

	public void increaseReadCount() {
		articleDao.updateReadCount(id, 1);
	}

	public void setArticleDao(ArticleDao articleDao) {
		this.articleDao = articleDao;
	}

}






ArticleDao
package madvirus.spring.chap05.board.dao;

import madvirus.spring.chap05.board.Article;

public interface ArticleDao {

	void insert(Article article);

	void updateReadCount(int id, int i);
} 





MySQLArticleDao
package madvirus.spring.chap05.board.dao;

import madvirus.spring.chap05.board.Article;

public class MySQLArticleDao implements ArticleDao {

	@Override
	public void insert(Article article) {
		System.out.println("MySQLArticleDao.insert() 실행");
	}  

	@Override
	public void updateReadCount(int articleId, int inc) {
		System.out.println("MySQLArticleDao.updateReadCount() 실행");
	}
}






WriteArticleService
package madvirus.spring.chap05.board.service;

import madvirus.spring.chap05.board.Article;

public interface WriteArticleService {

	void write(Article article);
}





WriteArticleServiceImpl
package madvirus.spring.chap05.board.service;

import madvirus.spring.chap05.board.Article;
import madvirus.spring.chap05.board.dao.ArticleDao;

public class WriteArticleServiceImpl implements WriteArticleService {

    private ArticleDao articleDao;

    public WriteArticleServiceImpl() {
    }
    
    public WriteArticleServiceImpl(ArticleDao articleDao) {
        this.articleDao = articleDao;
    }

    @Override
    public void write(Article article) {
        System.out.println("WriteArticleServiceImpl.write() 메서드 실행");
        articleDao.insert(article);
    }

}





Member
package madvirus.spring.chap05.member;

public class Member {

}




MemberService
package madvirus.spring.chap05.member.service;

import madvirus.spring.chap05.member.Member;

public interface MemberService {
	
	void regist(Member member);
	
	boolean update(String memberId, UpdateInfo info);
}





MemberServiceImpl
package madvirus.spring.chap05.member.service;

import madvirus.spring.chap05.member.Member;

public class MemberServiceImpl implements MemberService {


	@Override
	public void regist(Member member) {
		System.out.println("MemberServiceImpl.regist() 메서드 실행");
	}

	@Override
	public boolean update(String memberId, UpdateInfo info) {
		System.out.println("MemberServiceImpl.update() 메서드 실행");
		return true;
	}

}




UpdateInfo
package madvirus.spring.chap05.member.service;

public class UpdateInfo {

}