π μ AOPλ₯Ό μμμΌ νλκ°?
μλΉμ€μ λ‘κ·Έλ₯Ό μ°κ³ , μ±λ₯μ λΆμνκ³ , μμΈλ₯Ό μ²λ¦¬νλ €λ©΄ ν΅μ¬ λ‘μ§μ 건λλ¦¬μ§ μκ³ λ μ²λ¦¬ν μ μλ κΈ°μ μ΄ νμ → λ°λ‘ κ·Έκ² AOP
AOPλ₯Ό μ μ°λ©΄ μ€λ³΅ λ‘μ§μ μ€κ³ , μ μ§λ³΄μλ μ¬μμ§κ³ , μ½λμ κ΄μ¬μ¬κ° κΉλνκ² λΆλ¦¬λ¨
βοΈ AOP μ μ© κ΅¬μ‘° μμ½
• Pointcut : μ΄λμ (ex. νΉμ λ©μλ)
• Advice : 무μμ ν μ§ (ex. λ‘κ·Έ μ°κΈ°, μκ° μΈ‘μ λ±)
• JoinPoint / ProceedingJoinPoint : μ€μ λμ λ©μλμ κ·Έ μΈμμ μ κ·ΌνκΈ° μν λ°μΈλ λ³μ
• Weaving : λ°νμ μ μ€μ λ‘ AOPκ° μ μ©λλ μμ
π Advice μ’ λ₯λ³ ν΅μ¬ μ 리
β Before
• λ©μλ μ§μ μ§μ μ μ€ν
• JoinPoint μ¬μ©
• μμ : System.out.println(jp.getSignature().getName()) → λ©μλ μ΄λ¦ νμΈ
• λν μ©λ : "μ΄μ XX μλΉμ€ μμν©λλ€" λ‘κ·Έ μ°κΈ°
β After
• λ©μλ μ’ λ£ μ§ν (μ±κ³΅/μμΈ μκ΄μμ)
• λ©μλκ° λ λ°μλμ§ νμΈ κ°λ₯ (jp.getArgs())
• λν μ©λ : μ΄λ€ μΈμκ° λ€μ΄μλμ§ νμΈ
β Returning
• λ©μλκ° μ μμ μΌλ‘ μ’ λ£λκ³ κ° λ°νλμμ λ μ€ν
• λ°ν κ°μ²΄μ λ°λΌ λ‘μ§ λΆκΈ° κ°λ₯
if(returnObj instanceof BoardVO){...}
else if(returnObj instanceof MemberVO){...}
• λν μ©λ: “κ΄λ¦¬μ λ‘κ·ΈμΈνμ΅λλ€” κ°μ μν© κ΅¬λΆ
β Throwing
• μμΈ λ°μ μμ μλ§ μ€ν
• μμΈ λ‘κ·Έ λ¨κΈ°κΈ°
• ThrowingAdvice ν΄λμ€μ μμΈ μ²λ¦¬ λ‘μ§ μμ±
β Around
• λ©μλ μ€ν μ ν μ 체λ₯Ό κ°μ
• ProceedingJoinPoint μ¬μ©
• μ±λ₯ μΈ‘μ , μκ° κΈ°λ‘ λ± μ 체 νλ¦ μΆμ μ μ¬μ©
StopWatch sw = new StopWatch();
sw.start();
Object result = pjp.proceed();
sw.stop();
System.out.println(sw.getTotalTimeMillis());
π₯ μ€μ λ°©μ§ ν¬μΈνΈ
• Returning → Throwingμ μμ°¨μ μΌλ‘ μ μ©λμ§ μμ
• μμΈκ° λ°μνλ©΄ Returningμ μ€νλμ§ μμ
• μ΄λ΄ λ Aroundκ° λ΅ (μ 체λ₯Ό Try-Catch-Finally κ΅¬μ‘°λ‘ κ°μ)
• μνλ Adviceκ° μ λ¨Ήν λ ApplicationContext μ€μ νμΌ νμΈ
• static λ©μλμλ AOP μ μ© λΆκ° (κ°μ²΄ν μ μ )
π€ κ³ μ°°
• 곡ν΅λ‘μ§μ΄ λμ΄λ μλ‘ Advice ν΄λμ€λ₯Ό μ€μΌ μ μλ ꡬ쑰 κ³ λ―Ό
• AOPμ μ€μ λμ μμ μ μ νν μ΄ν΄νκ³ μ¨μΌ μ λλ‘ λ¨Ήν
π§ λ§λ¬΄λ¦¬ μμ½
Advice μ’ λ₯ | μΈμ μ€νλ¨ | μ£Όλ‘ μ°λ μν© |
Before | λ©μλ μ€ν μ | μμ λ‘κ·Έ μ°κΈ° |
After | λ©μλ μ€ν ν (무쑰건) | μΈμ μΆλ ₯ λ± |
Returning | μ μ λ¦¬ν΄ μ | κ²°κ³Ό κΈ°λ° λΆκΈ° μ²λ¦¬ |
Throwing | μμΈ λ°μ μ | μλ¬ λ‘κΉ λ° μ²λ¦¬ |
Around | μ 체 κ°μ | μκ° μΈ‘μ , νλ¦ μ μ΄ |