-
수동 프록시
- JDK Proxy
- Proxy.newProxyInstance()
- new로는 생성 안됨-> 기존의 getBean()으로는 안됨
- 결론: FactoryBean을 이용해 빈 생성 제어에 관여해야함
- JDK Proxy
-
ProxyFactoryBean
-
ex: TxProxiedParcelDelivertServiceFactoryBean
-
MethodInterceptor에서 직접 적용 타켓을 필터링했음
- 재사용성을 높이려면 ProxyFactoryBean에 적용 대상 class, method 필터링이 설정되면 안됨.
-
Pointcut: '메서드 필터'라 생각하자
-
ex: NameMatchMethodPointcut(spring 제공)
-
설정 예시
<bean id="transactionPointcut" class="org.springframework.aop.support.NameMatchMethodPointcut"> <property name="mappedName" value="receiptAll"/> </bean>
-
-
Advice: '부가 기능'
- implements MethodInterceptor
- 참고: JDK Proxy에서는 java.lang.reflect.InvocationHandler를 사용했음
- MethodInterceptor의 발생 예외는 (InvocationHandler와는 달리) 포장되지 않음
- InvocationHandler는 타켓 클래스의 예외를 InvocationTargetException으로 포장함
-
Advisor = Advice + Pointcut
-
DefaultPoincutAdvisor(spring 제공)
-
ProxyFactoryBean 등록 시 interceptorNames 프로퍼티를 이용해 advisor를 등록한다
-
ProxyFactoryBean 설정 예시
<bean id="parcelService" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="target" ref="parcelServiceImpl"/> <property name="interceptorNames"> <list> <value>txAdivsor</value> </list> </property> </bean>
-
-
결국, target 별로 ProxyFactoryBean을 만들어 줘야한다는 한계는 남아 있음
-
-
DefaultAdvisorAutoProxyCreator
-
BeanPostProcessor의 일종: application context에서 빈 등록 후 수행됨
-
등록된 빈 중 Advisor를 모두 조사해 자동으로 대상을 Proxing 한다.
-
id 등록 필요없음
<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>
-
클래스 필터링을 강화한 pointcut 클래스 제작
- NameMatchMethodAndClassPointcut
- PatternMatchUtils.simpleMatch 활용: * 포함 매칭식을 편리하게 검증
-
-
Q(질문?)
- 리스트 6-51: static inner class 와 그냥 inner class의 차이?
- InnerClassTest 참고
- 리스트 6-51: static inner class 와 그냥 inner class의 차이?
- AspectJExpressionPointcut
- 2개의 핵심 구성원
- class: ClassFilter
- method: MethodMatcher
- AspectJ 표현식 학습 테스트(gist)
- 기타 표현식
- bean()
- 예: bean(WithTimestamp) and execution( *.printHello(..))
- @annotation
- 스프링에서 즐겨 사용하는 AOP 포인트 컷 적용 방식
- bean()
- 참고 링크
- 2개의 핵심 구성원
-
AOP
- 정의: separation of cross-cutting concerns 개념을 구체화한 것임
- 토스3의 그림 6-21 보다는 다음의 링크를 편안하게 읽어본다.
- http://bit.ly/opinion-of-aop-via-aspectj
- AspectJ: 바이트 코드 생성과 조작을 이용한 AOP
- AJDT visualizer
- 활용: 보안, 로깅, 트랜잭션 ...
-
AOP 용어
- pointcut: 필터, 혹은 선별 작업의 개념
- join point: advice의 결합 위치. 스프링 AOP에는 메서드 실행(exection)뿐이다.
- aspect: 고도화된 advisor