Both sides previous revisionPrevious revisionNext revision | Previous revision |
back-end:spring [2022/06/19 16:42] – Pointcut 문단 수정 ledyx | back-end:spring [2024/10/14 01:35] (current) – [Lifecycle Callbacks] ledyx |
---|
</sxh> | </sxh> |
| |
* 메서드를 구현하고 @PostConstruct, @PostDestroy 사용. (Java 표준) => 추천! | * 메서드를 구현하고 @PostConstruct, @PreDestroy 사용. (Java 표준) => 추천! |
| |
| |
client-- request -->ProxyFactory | client-- request -->ProxyFactory |
ProxyFactory-- Proxy 대상 객체가 Interface를 구현 O -->p1[JDK dynamic proxy] | ProxyFactory-- Proxy 대상 객체가 Interface를 구현 O -->p1[JDK dynamic proxy] |
ProxyFactory-- Proxy 대상 객체가 Interface를 구현 X -->p2[CGLIB proxy] | ProxyFactory-- Proxy 대상 객체가 Interface를 구현 X<br>Target Class를 상속 -->p2[CGLIB proxy] |
p1-- "call" -->a["Advice\n(추상화)"] | p1-- "call" -->a["Advice\n(추상화)"] |
p2-- "call" -->a["Advice\n(추상화)"] | p2-- "call" -->a["Advice\n(추상화)"] |
| |
* execution : Method 실행 join points를 matching. Spring AOP로 작업할 때 가장 우선적인 PCD이다. | * execution : Method 실행 join points를 matching. Spring AOP로 작업할 때 가장 우선적인 PCD이다. |
* Type Matching시 부모 타입 가능 | * declaring-type-pattern에서 부모 타입 가능 |
* within : 특정 Type에 join points를 matching. | * param-pattern에서 부모 타입 불가능 |
| |
| * within : 특정 Type에 join points 적용. |
* 부모 타입 불가능. 정확히 맞아야 한다. | * 부모 타입 불가능. 정확히 맞아야 한다. |
* this : Spring 빈 객체(Spring AOP Proxy)를 대상 | * target : target 객체(Spring AOP Porxy가 적용되는 __실제 객체__)를 대상으로 하는 join points 적용 |
* target : target 객체(Spring AOP Porxy가 적용되는 실제 객체)를 대상으로 하는 joinpoints | * 부모 타입 가능. |
| * this : Spring 빈 객체(Spring AOP __Proxy__)를 대상 |
| * 부모 타입 가능. |
* args : 인자가 주어진 타입의 인스턴스 한정 | * args : 인자가 주어진 타입의 인스턴스 한정 |
* @target : 실행 객체의 Class에 지정된 Type의 Annotation이 있는 Join points. | * 부모 타입 가능 |
* @args : 전달된 실제 arguments의 Runtime type이 주어진 Type의 Annotation이 있는 Join points | |
* @annotation : Method가 주어진 Annotation을 갖고 있는 Join points에 matching. | |
| * @target : Annotation이 있는 Type에서 부모 타입을 허용하여 모든 Method에 join points 적용 |
| * @within : Annotation이 있는 Type 내에 있는 Method에 join points 적용. (부모 타입 불가) |
| |
| * @args : 전달된 실제 arguments의 Runtime type이 주어진 Type의 Annotation이 있는 Join points 적용 |
| * 부모 타입 허용 |
| * @annotation : Method가 주어진 Annotation을 갖고 있는 Join points 적용. |
| |
| <note important> |
| **args, @args, @target**는 단독으로 사용하면 안된다! |
| 이 PCD들은 인스턴스가 만들어진 후 Runtime 시점에서 동작한다. |
| 그러므로 단독으로 사용하면 모든 스프링 빈에 AOP를 적용하려고 시도한다. |
| 이 때, 스프링 내부에서 사용하는 빈 중에 'final'로 지정된 빈이 있어서 오류가 발생한다. |
| </note> |
| |
===== execution ===== | ===== execution ===== |