@Aspect 어노테이션을 이용해서 AOP를 구현하는 과정은 XML스키마 기반의 AOP를 구현하는 과정과 거의 유사하며, 차이점은 다음과 같다.
① @Aspect 어노테이션을 이용해서 Aspect 클래스를 구현한다. 이때 Aspect 클래스는 Advice를 구현한 메서드와 Pointcut을 포함한다.
② XML 설정에서 <aop:aspectj-autoproxy/>를 설정한다.
FaqBoardImpl.java
package sp.aop.service; import org.springframework.stereotype.Component;
@Component("faqBoard") @Override
@Override |
NoticeBoardImpl.java
package sp.aop.service; import org.springframework.stereotype.Component;
@Component("noticeBoard") @Override
@Override |
BoardController.java
package sp.aop.controller; import javax.annotation.Resource; import org.springframework.web.servlet.ModelAndView; import sp.aop.service.Board;
public class BoardController extends
@Resource(name="noticeBoard") } |
LogAspect.java
package sp.aop.aspect; import org.aspectj.lang.ProceedingJoinPoint;
@Aspect
@Pointcut("execution(public * sp.aop.service.*.get*(..))") |
●@Pointcut 어노테이션은 Pointcut을 정의하는 AspectJ 표현식을 값으로 갖게 됨.
●@Pointcut 어노테이션을 적용한 메서드는 리턴 타입이 void 여야 함
●@Pointcut 어노테이션을 이용해서 Pointcut을 정의하면, Advice 관련 어노테이션에서 해당 메서드 이름을 이용해서 Pointcut을 사용할 수 있게 됨.
spring302-servlet.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" <context:annotation-config/> </beans> |
● <aop:aspectj-autoproxy/> 태그를 사용하게 되면 @Aspect 어노테이션이 적용된 빈 객체를 Aspect로 사용하게 됨.
결과
<<===== START =====>> |
[참고자료] Spring 3.0 프로그래밍-최범균
'프로그램 > Spring 3.0' 카테고리의 다른 글
@Aspect 어노테이션을 이용한 AOP - @AfterThrowing (0) | 2012.05.09 |
---|---|
@Aspect 어노테이션을 이용한 AOP - @Before, @AfterReturning (0) | 2012.05.09 |
Advice 타입 별 클래스 작성 - 여러 Advice에 동일한 Pointcut 참조 (0) | 2012.05.05 |
Advice 타입 별 클래스 작성 <aop:after>, <aop:around> (0) | 2012.05.05 |
Advice 타입 별 클래스 작성 <aop:after-throwing> (0) | 2012.05.05 |