Schema 기반 Spring AOP 포인트컷 만들 때 주의 할 것
<aop:pointcut id="sellTicket"
expression="execution(* sell*(..))" />
<aop:aspect id="cinema" ref="aspect">
<aop:pointcut id="sellTicket2"
expression="execution(* sell*(..))" />
<aop:pointcut id="sellTicket3"
expression="execution(* sell*(..))" />
<aop:before method="welcome" pointcut-ref="sellTicket" />
<aop:before method="welcome" pointcut-ref="sellTicket2" />
</aop:aspect>
</aop:config>
<aop:aspect> 태그 안에 pointcut 정의는 하나밖에 올 수가 없습니다. 안그럼 어제 아침에 적었던 'Schema 기반 Spring AOP 희한한 것'에서 보았던 에러가 발생합니다.
대신 <aop:config> 태그 아래 <aop:aspect> 태그 밖에 정의를 하면 여러개를 정의할 수 있습니다.
<aop:pointcut id="sellTicket"
expression="execution(* sell*(..))" />
<aop:pointcut id="sellTicket2"
expression="execution(* sell*(..))" />
<aop:aspect id="cinema" ref="aspect">
<aop:pointcut id="sellTicket3"
expression="execution(* sell*(..))" />
<aop:before method="welcome" pointcut-ref="sellTicket" />
<aop:before method="welcome" pointcut-ref="sellTicket2" />
</aop:aspect>
</aop:config>
즉 이렇게 만들면 에러 없이 잘 돌아갑니다. aspect 안에는 최대 하나밖에 허용하지 않고 (물론 in-line 포인트컷을 만들면 여러 개의 포인트컷을 사용할 순 있습니다.) config 안에는 여러개가 있어도 되는 걸 알 수 있습니다.
아무래도 config에서 만드는 포인트컷들은 다른 애스팩트의 어드바이스들에서 사용할 것이기 때문에 독립적으로 여러개 존재 하도록 한 것 같습니다.
여기서 드러나는 스키마 기반 Spring AOP의 불편한 점
2. @AspectJ에는 없는 config 라는 영역이 존재해서 혼란스럽습니다.
3. 더군다나 @AspectJ에서 포인트컷끼리 연산을 할 때 사용한 &&, ||, ! 을 사용할 수 없다는 것도 불편합니다.