Spring
스프링AOP
정숙씨의 쏠쏠한 코딩
2021. 11. 14. 19:20
- 스프링 AOP 관련 용어 -
용어 | 설명 |
aspect | 구현 하고자 하는 보조 기능을 의미 |
advice | aspect의 실제 구현체(클래스)를 의미한다. 메서드 호출을 기준으로 여러 지점에서 실행된다. |
joinpoint | advice를 적용 하는 지점을 의미한다, 스프링은 method 결합점만 제공 한다. |
pointcut | advice가 적용되는 대상을 지정한다, 패키지이름/클래스이름/메서드이름을 정규식으로 지정하여 사용한다. |
target | advice가 적용되는 클래스를 의미한다. |
weaving | advice를 주기능에 적용 하는 것을 의미한다. |
- 스프링 프레임워크에서 AOP 기능을 구현 하는 방법 -
- 스프링 프레임워크에서 제공하는 AOP 관련 API를 이용 하는 방법
- 어노테이션 이용 방법
- @Aspect 어노테이션 이용
- 스프링 API를 이용한 AOP 기능 구현 과정 -
- 타깃(Target) 클래스 지정
- 어드바이스(Advice) 클래스 지정
- 설정 파일에서 포인트컷(PointCut)을 설정
- 설정 파일에서 어드바이스와 포인트컷을 결합하는 어드바이저를 설정
- 설정 파일에서 스프링의 ProxyFactoryBean 클래스를 이용해 타깃에 어드바이스 설정
- getBean() 메서드로 빈 객체에 접근해 사용
- 스프링 API 에서 제공하는 Advice 인터페이스 -
인터페이스 | 추상 메서드 | 설명 |
MethodBeforeAdvice | void before(Method mehod, Object[] args, Object target) throws Throwable |
해당 메서드가 실행 되기 전 실행 |
- Method method : 대상 객체에서 실행된 메서드를 나타내는 메서드 객체 - Object[] args : 메서드 인자 목록 - Object target : 대상 객체 |
인터페이스 | 추상 메서드 | 설명 |
AfterReturningAdvice | void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable | 해당 메서드가 실행 된 후 실행 |
- Object returnValue : 대상 객체의 메서드가 반환 하는 값 - Method method : 대상 객체에서 실행된 메서드를 나타내는 메서드 객체 - Object[] args : 메서드 인자 목록 - Object target : 대상 객체 |
인터페이스 | 추상 메서드 | 설명 |
ThrowAdvice | void afterThrowing(Method method, Object[] args, Object target, Exception ex) throws Throwable | 해당 메서드에서 예외 발생 시 실행 |
- Method method : 대상 객체에서 메서드를 나타내는 메서드 객체 - Object[] args : 메서드 인자 목록 - Object target : 대상 객체 - Exception ex : 발생한 예외 타입 |
인터페이스 | 추상 메서드 | 설명 |
MethodInterceptor | Object invoke(MethodInvocation invocation) | 해당 메서드의 실행 전/후와 예외 발생 시 실행 |
- MethodInvocation invocation : 대상 객체의 모든 정보를 담고 있는 객체(호출된 메서드, 인자 등) - MethodInvocation 에서 invoke() 메서드를 통해 다른 세가지 인터페이스들의 기능을 동시에 수행 할 수 있다. |
- xml 스키마 방식 -
- 공통 부분 Main.class -
-> 메서드 호출시 이해한게 맞다면 joinpoint 부분
- loggingAdvice.class-
AOP 구현간 메서드 전/후 처리에 대한 advice 부분
-Calculator.class-
-> 스프링 AOP간 핵심 기능 제공을 하는 클래스, 이해한게 맞다면 Weaving 부분으로 확인됨
프록시 패턴에 대해서 공부 해보는것도 나쁘지 않아보임.