※ joinpoint(조인포인트)
수행중인 포인트컷
joinpoint를 인자로 가지게되면(pjp처럼) 현재 수행중인 비즈니스메서드의 시그니처 등을 알 수 있음
pjp = ProceedingJoinPoint
※ 바인드 변수
Object returnObj
설정을 해준다면, 비즈니스메서드의 반환값을 바인드 변수에 자동으로 매핑해준다.
동적바인딩에 바인딩과 비슷하다!
@ 어노테이션을 이용하여 AOP 설정하는 방법
xml파일에서 스프링 컨테이너에게
지금부터 AOP 설정을 @ 으로 한다는 것을 명시해주어야함
<aop:aspectj-autoproxy>
→ aspect를 하려면
포인트컷 + 횡단관심
1) 포인트컷을 설정
연결하고자하는 횡단관심이 작성된 클래스에서 설정가능
@Pointcut
2) 횡단관심이 aspectj 될 시기를 설정
3) 객체를 Service(Component)를 통해 Bean으로 등록,
Aspect 된 횡단관심 클래스라는 것을 지칭해주기 위해 @Aspect를 작성
❗ 그렇다면 PointCut 들만 별도로 모아 클래스로 관리하면 어떨까?
PointCut만 모아둔 클래스를 만들고 이 PointCut과 횡단관심과의 결합을 위한 Aspect라는 것을 명시해준다.
이 때, 클래스명이 Aepect나 Pointcut이면 오류가 발생하니 PointCut으로 만들었다.
그 후 , 역시 결합을 위한 @Aspect를 명시해주고,
@Before 뒤에는 ("PointCut 클래스의 aPointcut() " ) 이라는 것을 명시해주면 된다.
결과적으로,
<bean id="La" class="com.kim.biz.common.LogAdvice" />
<bean id="ara" class="com.kim.biz.common.AfterReturningAdvice" />
<bean id="at" class="com.kim.biz.common.AfterThrowingAdvice" />
<bean id="aa" class="com.kim.biz.common.AroundAdvice" />
<aop:config>
<aop:pointcut id="aPointcut" expression="execution(* com.kim.biz..*Impl.*(..))" />
<aop:pointcut id="bPointcut" expression="execution(* com.kim.biz..*Impl.select*(..))" />
<aop:aspect ref="La">
<aop:before pointcut-ref="aPointcut" method="printLog" />
</aop:aspect>
<aop:aspect ref="ara">
<aop:after-returning method="printLogAfterReturning" pointcut-ref="bPointcut" returning="returnObj" />
</aop:aspect>
<aop:aspect ref="at">
<aop:after-throwing method="AfterThrowing" pointcut-ref="bPointcut" throwing="exceptObj" />
</aop:aspect>
<aop:aspect ref="aa">
<aop:around pointcut-ref="aPointcut" method="printLogAround"/>
</aop:aspect>
</aop:config>
이정도 양의 xml 코드를
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
이 한줄로 정리한 것이다.
그렇다면 이러한 의문점이 들 수 있을것이다.
모든 xml을 @(어노테이션) 화 하면 될텐데 왜 그러지 않을까?
그 이유는 우리가 만드는 클래스는 @를 달 수 있지만,
DataSource나 Class를 외부로부터 제공받으면 @를 할 수 없다.
이를 다룬 내용은 다음 내용에 포스팅하겠다.
'개발자노트 > Spring' 카테고리의 다른 글
Spring - 컨트롤러, 리퀘스트 매핑 @Controller / @RequestMapping , Spring에서 매핑하는법 (0) | 2022.09.21 |
---|---|
Spring - 디스패쳐서블릿 (DispatcherServlet) / 핸들러 매핑 (HandlerMapping) / 뷰 리졸버 (ViewResolver) (2) | 2022.09.19 |
AOP 용어 정리 (0) | 2022.09.15 |
의존성 주입 ( DI = Dependency Injection ) (2) | 2022.09.14 |
Spring AOP ( 관점지향 프로그래밍 ) (0) | 2022.09.13 |