Springμμ νλ‘μ ν¨ν΄μ νμ©νμ¬ AOPκ° μ΄λ»κ² λμνλμ§ λ¨κ³λ³λ‘ νμ΅νλ νλ‘μ νΈμ λλ€.
- νλ‘μ ν¨ν΄:
SubjectμΈν°νμ΄μ€λ₯Ό ꡬννCacheProxyλ₯Ό ν΅ν΄ μΊμ± κΈ°λ₯ μΆκ° - λ°μ½λ μ΄ν° ν¨ν΄:
MessageDecorator,TimeDecoratorλ₯Ό 체μ΄λνμ¬ λΆκ° κΈ°λ₯ μ μ©
- μΈν°νμ΄μ€ μμ΄ κ΅¬μ²΄ ν΄λμ€λ₯Ό μμλ°μ νλ‘μ ꡬν
TimeProxyκ°ConcreteLogicμ μμλ°μ μ€ν μκ° μΈ‘μ
- Java Reflection APIλ₯Ό νμ©ν λμ νλ‘μ μμ±
InvocationHandlerλ₯Ό ꡬννμ¬ κ³΅ν΅ λ‘μ§ μ μ©- μΈν°νμ΄μ€ κΈ°λ°μΌλ‘λ§ νλ‘μ μμ± κ°λ₯
ProxyFactoryλ₯Ό μ¬μ©νμ¬ JDK λμ νλ‘μ/CGLIB μλ μ νAdvice,Pointcut,Advisorκ°λ νμ΅- μΈν°νμ΄μ€κ° μμΌλ©΄ JDK λμ νλ‘μ, μμΌλ©΄ CGLIB μ¬μ©
- μ€νλ§ λΉ λ±λ‘ μμ μ νλ‘μλ‘ κ΅μ²΄
PackageLogTracePostProcessorλ‘ νΉμ ν¨ν€μ§μ λΉλ§ νλ‘μ μ μ©
AnnotationAwareAspectJAutoProxyCreatorλ₯Ό ν΅ν μλ νλ‘μ μμ±- PointcutμΌλ‘ νλ‘μ μ μ© λμ νν°λ§
@Aspect,@Aroundμ λ Έν μ΄μ κΈ°λ° AOP ꡬν- AspectJ ννμμ μ¬μ©ν Pointcut μ μ
ProceedingJoinPointλ‘ λμ λ©μλ νΈμΆ
src/
βββ main/java/hello/proxy/
β βββ app/
β β βββ v1/ # μΈν°νμ΄μ€ κΈ°λ° μ ν리μΌμ΄μ
β β βββ v2/ # ꡬ체 ν΄λμ€ κΈ°λ° μ ν리μΌμ΄μ
β β βββ v3/ # μ»΄ν¬λνΈ μ€μΊ κΈ°λ° μ ν리μΌμ΄μ
β βββ config/
β β βββ v1_proxy/ # μλ νλ‘μ μ€μ
β β βββ v2_dynamicproxy/ # JDK λμ νλ‘μ μ€μ
β β βββ v3_proxyfactory/ # νλ‘μ ν©ν 리 μ€μ
β β βββ v4_postprocessor/ # λΉ νμ²λ¦¬κΈ° μ€μ
β β βββ v5_autoproxy/ # μλ νλ‘μ μ€μ
β β βββ v6_aop/ # @Aspect AOP μ€μ
β βββ trace/ # λ‘κ·Έ μΆμ μ νΈλ¦¬ν°
β
βββ test/java/hello/proxy/
βββ pureproxy/ # μμ νλ‘μ/λ°μ½λ μ΄ν° ν¨ν΄ ν
μ€νΈ
βββ jdkdynamic/ # JDK λμ νλ‘μ ν
μ€νΈ
βββ proxyfactory/ # νλ‘μ ν©ν 리 ν
μ€νΈ
βββ advisor/ # Advisor ν
μ€νΈ
βββ postprocessor/ # λΉ νμ²λ¦¬κΈ° ν
μ€νΈ
| κ°λ | μ€λͺ |
|---|---|
| Advice | νλ‘μκ° νΈμΆνλ λΆκ° κΈ°λ₯ (λ‘κΉ , νΈλμμ λ±) |
| Pointcut | μ΄λμ λΆκ° κΈ°λ₯μ μ μ©ν μ§ νλ¨νλ νν°λ§ λ‘μ§ |
| Advisor | Advice + Pointcutμ νλλ‘ λ¬Άμ κ² |
| @Aspect | μ¬λ¬ Advisorλ₯Ό νΈλ¦¬νκ² μμ±νλ μ λ Έν μ΄μ |
- Java 17+
- Spring Boot
- Gradle