Last updated
Last updated
Spring Frameworkμ ν΅μ¬ κ°λ 3κ°μ§μμ€ μ½λμ 볡μ‘λλ₯Ό μ€μ΄κ³ , ν¨μ¨μ λμ΄κ³ , μ μ§λ³΄μλ₯Ό μ©μ΄νκ² νκΈ° μν΄ Springμμλ λ€μμ 3κ°μ§λ₯Ό μ΄μ©νλ€.
AOP
AOPλ μΈ‘λ©΄ μ§ν₯μ νλ‘κ·Έλλ°μ μ½μλ‘, μ¬λ¬ κ°μ²΄μ 곡ν΅μ μΌλ‘ μ μ©λ μ μλ λ‘μ§μ λΆλ¦¬νμ¬ μ¬μ¬μ©μ±μ λμ΄λ νλ‘κ·Έλλ° κΈ°λ²μ΄λ€.
ν λ©μλ λ΄λΆμλ λ€μν κ΄μ¬μ¬(Concern)κ° μ‘΄μ¬νλλ°, AOPλ₯Ό μ΄μ©νλ©΄ μ΄ κ΄μ¬μ¬λ₯Ό κΈ°μ€μΌλ‘ μ½λλ₯Ό μΈλ‘λ‘ λΆλ¦¬νμ¬ λ€λ£¨κ² λλ€.
μ΄ μ€ ν΅μ¬ κ΄μ¬μ¬κ° μλ λΆκ°μ μΈ κ΄μ¬μ¬λ μ¬λ¬ λ©μλμμ 곡ν΅μ μΌλ‘ μ΄μ©λλ κ²½μ°κ° λ§λ€. (νΈλμμ μ²λ¦¬, 보μ λ±)
λ°λΌμ, μ΄λ κ² κ΄μ¬μ¬λ₯Ό λΆλ¦¬ν΄μ λ€λ£¨λ©΄ μ€λ³΅λλ μ½λλ₯Ό μ€μΌ μ μλ€λ μ₯μ
μ΄ μλ€.
Aspect
: Concernμ λͺ¨λνν κ²μΌλ‘, μ£Όλ‘ κ³΅ν΅ λ‘μ§μΈ κ΄μ¬μ¬ 1κ³Ό 3μ΄ μ΄μ ν΄λΉνλ€.
Advice
: Aspect λ΄ λ©μλλ€μ μΌμ»«λ μ©μ΄λ‘, μ€μ λ‘μ§μ ν΄λΉ
JoinPoint
: Adviceλ₯Ό μ μ©ν μμΉ
PointCut
: νΉμ λ©μλμλ§ Adviceλ₯Ό μ μ©νλ κ²μ λ§ν¨
Target
: Aspectλ₯Ό μ μ©ν ν΄λμ€, λ©μλ λ±μ λ§νλ€.
IoC 컨ν
μ΄λ λ΄μμ BeanμΌλ‘ λμνλ€. ν΄λΉ Beanμ νλ‘μ κ°μ²΄
λ‘, λ°νμ μμ μ μμ±λμ΄ μ¬μ©λλ€.
AOPλ₯Ό μ¬μ©νκΈ° μν΄μλ @Aspectλ₯Ό λΆμΈ ν΄λμ€μ Adviceλ₯Ό μ μν λ€ Adviceμ μ§μ μμ (μ , ν, μ /ν)μ μ νλ μΈν°νμ΄μ€λ₯Ό μ¬μ©νλ©΄ λλ€.
AOPλ BeanμΌλ‘ λ±λ‘λμ΄μΌ νλ―λ‘ @Component μ΄λ Έν μ΄μ μ΄ μ¬μ©λμλ€. @Pointcutμ ν΅ν΄ νΉμ Adviceκ° μ¬μ©λ ν¨ν€μ§ λ²μ, νλΌλ―Έν° λ±μ μ€μ νλ€.
μ§μ λ²μ, νλΌλ―Έν°λ₯Ό μ¬μ¬μ©ν΄μΌ ν κ²½μ° PointcutμΌλ‘ μ μΈνλ κ²μ΄ μ’λ€. κ·Έλ¬λ λ¨ ν λ²λ§ μ¬μ©νλ κ²½μ° @Around λ΄μ λ²μλ₯Ό μ§μ ν΄λ λλ€.
Pointcutλ§ λ°λ‘ λͺ¨μλ common aspectλ₯Ό μμ±νλ κ²λ ν¨μ¨μ μ΄λ€.
AOPλ μ¬λ¬ κ°κ° μ μ©λ μ μλ€. μ¦, λ©μΈ λ‘μ§μ μ€ν μ νλ‘ μ¬λ¬ νλ‘μλ₯Ό κ±°μΉ μ μλ€.
μ΄ νλ‘μλ€ κ°μ μμκ° λ³΄μ₯λμ΄μΌ νλ€λ©΄ @Order μ΄λ Έν μ΄μ μ μ¬μ©νλ©΄ λλ€.