※ Before Advice를 구현할 때에는 @Before 어노테이션을 사용
- 대상 객체의 메서드 호출 전에 공통 기능을 실행
※ After Returning Advice를 구현하려면 @AfterReturning 어노테이션을 Advice 구현 메서드에 적용
- 대상 객체의 메서드가 예외 없이 실행한 이후에 공통 기능을 실행
■ 대상 객체 및 호출되는 메서드에 대한 정보나 전달되는 파라미터에 대한 정보가 필요한 경우 org.aspectj.lang.JoinPoint를 파라미터로 추가
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") } |
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로 사용하게 됨
TestAspect.java - 1
package sp.aop.aspect; import org.aspectj.lang.JoinPoint;
@Aspect
@Before("execution(public * sp.aop.service.*.get*(..))")
****************************************************************************************** ● @Before 어노테이션의 값으로는 AspectJ의 Pointcut 표현식이나 @Pointcut 어노테이션이 적용된 메서드 이름이 올 수 있음. (위 예제의 경우는 AspectJ의 표현식을 사용) ● JoinPoint 타입의 파라미터를 첫 번째 파라미터로 가질 수 있음
|
<<===== START =====>> |
TestAspect.java - 2
package sp.aop.aspect; import org.aspectj.lang.JoinPoint;
@Aspect |
<<===== START =====>> |
TestAspect.java - 3
package sp.aop.aspect; import org.aspectj.lang.JoinPoint;
@Aspect @AfterReturning(pointcut="execution(public * sp.aop.service..*(..))", returning="ret")
****************************************************************************************** ● Advice 구현 메서드 내에서 Advice 대상 객체가 리턴한 값을 사용하고 싶다면 returning 속성을 이용해서 리턴 값을 전달받을 파라미터의 이름을 지정 ● 특정타입의 리턴 객체에 대해 메서드를 실행하고 싶다면 다음과 같이 한정하고 싶은 타입의 파라미터를 사용 => public void afterReturning(JoinPoint joinPoint, AAA ret){ ... }
|
<<===== START =====>> |
[참고자료] Spring 3.0 프로그래밍-최범균
'프로그램 > Spring 3.0' 카테고리의 다른 글
@Aspect 어노테이션을 이용한 AOP - @After, @Around (0) | 2012.05.09 |
---|---|
@Aspect 어노테이션을 이용한 AOP - @AfterThrowing (0) | 2012.05.09 |
@Aspect 어노테이션을 이용한 AOP (0) | 2012.05.09 |
Advice 타입 별 클래스 작성 - 여러 Advice에 동일한 Pointcut 참조 (0) | 2012.05.05 |
Advice 타입 별 클래스 작성 <aop:after>, <aop:around> (0) | 2012.05.05 |