프로그램/Spring 3.0
Advice 타입 별 클래스 작성 - 여러 Advice에 동일한 Pointcut 참조
영혼과영혼의양식
2012. 5. 5. 20:30
<aop:pointcut> 태그와 각 Advice 설정 태그의 pointcut-ref 속성을 이용해서 Pointcut을 설정하고 여러 Advice에서 동일한 Pointcut을 참조
FaqBoardImpl.java
package sp.aop.service;
import org.springframework.stereotype.Component;
@Component("faqBoard") public class FaqBoardImpl implements Board {
@Override public String getBoardName() { // TODO Auto-generated method stub return "FAQ Board"; }
@Override public String checkBoard() { // TODO Auto-generated method stub return "N"; } } |
NoticeBoardImpl.java
package sp.aop.service;
import org.springframework.stereotype.Component;
@Component("noticeBoard") public class NoticeBoardImpl implements Board {
@Override public String getBoardName() { // TODO Auto-generated method stub return "Notice Board"; }
@Override public String checkBoard() { // TODO Auto-generated method stub return "Y"; } } |
BoardController.java
package sp.aop.controller;
import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import sp.aop.service.Board;
public class BoardController extends org.springframework.web.servlet.mvc.AbstractController {
@Resource(name="noticeBoard") private Board board; @Override protected ModelAndView handleRequestInternal(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception { // TODO Auto-generated method stub System.out.println("<<===== START =====>>"); System.out.println("Board Name-1 : " + board.getBoardName()); System.out.println(""); System.out.println("Board Check-1 : " + board.checkBoard()); System.out.println("<<===== END =====>>"); return null; }
} |
LogAdvice.java
package sp.aop.advice;
import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint;
public class LogAdvice {
public Object logPrint(ProceedingJoinPoint joinPoint) throws Throwable{ System.out.println("***** START *****"); try{ System.out.println("*"); System.out.println("**"); Object ret = joinPoint.proceed(); System.out.println("***"); System.out.println("****"); return ret; }finally{ System.out.println("***** END *****"); } } public void before(JoinPoint joinPoint){ System.out.println("***** before *****"); } public void afterReturning(Object obj){ System.out.println("***** after-returning *****"); System.out.println("obj : " + obj.toString()); } public void afterThrowing(Throwable exp){ System.out.println("***** after-throwing *****"); System.out.println("ex : " + exp.toString()); } public void afterFinally(JoinPoint joinPoint){ System.out.println("***** after finally *****"); System.out.println("joinPoint : " + joinPoint.toString()); } } |
spring302-servlet.xml
결과
<<===== START =====>> ***** before ***** ***** after-returning ***** obj : Notice Board Board Name-1 : Notice Board
***** START ***** * ** ***** after finally ***** joinPoint : execution(String sp.aop.service.Board.checkBoard()) *** **** ***** END ***** Board Check-1 : Y <<===== END =====>>
|
[참고자료] Spring 3.0 프로그래밍-최범균