spring aop
π spring aop
μ€νλ§ aop
- AOPλ Aspect Oriented Programmingμ μ½μλ‘ κ΄μ μ§ν₯ νλ‘κ·Έλλ° μ΄λΌκ³ λΆλ₯Έλ€.
- μ΄λ€ λ‘μ§μ κΈ°μ€μΌλ‘ ν΅μ¬μ μΈ κ΄μ , λΆκ°μ μΈ κ΄μ μΌλ‘ λλμ΄μ λ³΄κ³ κ·Έ κ΄μ μ κΈ°μ€μΌλ‘ κ°κ° λͺ¨λν νκ² λ€λ κ²
- λͺ¨λνλ μ΄λ€ 곡ν΅λ λ‘μ§μ΄λ κΈ°λ₯μ νλμ λ¨μλ‘ λ¬Άλ κ²μ λ§ν¨
- κ° κ΄μ μ κΈ°μ€μΌλ‘ λ‘μ§μ λͺ¨λν νλ€λ κ²μ μ½λλ€μ λΆλΆμ μΌλ‘ λλμ΄μ λͺ¨λν νκ² λ€λ μλ―Έ
- μμ€ μ½λμμμ λ€λ₯Έ λΆλΆμ κ³μ λ°λ³΅ν΄μ μ°λ μ½λλ€μ λ°κ²¬ν μ μλλ° μ΄κ²μ ν©μ΄μ§ κ΄μ¬μ¬λΌ λΆλ₯Έλ€
- ν©μ΄μ§ κ΄μ¬μ¬λ₯Ό Aspectλ‘ λͺ¨λν νκ³ ν΅μ¬μ μΈ λΉμ¦λμ€ λ‘μ§μμ λΆλ¦¬νμ¬ μ¬μ¬μ© νκ² λ€λ κ²μ΄ AOPμ μ·¨μ§μ΄λ€.
μ©μ΄ μ 리
- @Aspect : μ΄ ν΄λμ€κ° κ΄μ μμ λνλ΄λ μ΄λ Έν μ΄μ
- JoinPoint : Adviceκ° μ μ©λ μμΉ, λΌμ΄λ€ μ μλ μ§μ , λ©μλ μ§μ μ§μ , μμ±μ νΈμΆ μμ , νλμμ κ°μ κΊΌλ΄μ¬λ λ₯ λ€μν μμ μ μ μ©κ°λ₯
- pointcut : Aλ λ©μλμ μ§μ
μμ μ νΈμΆν κ² κ³Ό κ°μ΄ λμ± κ΅¬μ²΄μ μΌλ‘ adviceκ° μ€νλ μ§μ μ μ ν μ μμ
μμ
```
@Aspect @Component public class MemberAspect {
@Before("execution(* read(String))")
public void beforeMethod(JoinPoint jp) {
System.out.println("[BeforeMethod] : λ©μλ νΈμΆ μ ");
Signature sig = jp.getSignature();
System.out.println(" λ©μλ μ΄λ¦:" + sig.getName());
Object[] obj = jp.getArgs();
System.out.println(" μΈμ κ°:" + obj[0]);
}
@After("execution(* read(String))")
public void afterMethod() {
System.out.println("[AfterMethod] : λ©μλ νΈμΆ ν");
}
@AfterReturning(value = "execution(* read(String))", returning = "member")
public void afterReturningMethod(JoinPoint jp, StudentVO member) {
System.out.println("[afterReturningMethod] : λ©μλ νΈμΆ ν");
Signature sig = jp.getSignature();
System.out.println(" λ©μλ μ΄λ¦:" + sig.getName());
Object[] obj = jp.getArgs();
System.out.println(" μΈμ κ°:" + obj[0]);
}
@AfterThrowing(value = "execution(* read(String))", throwing = "ex")
public void afterThrowingMethod(Throwable ex) {
// λ©μλ νΈμΆμ΄ μμΈλ₯Ό λ΄λ³΄λμ λ νΈμΆλλ Advice
System.out.println("[AfterThrowingMethod] : μμΈ λ°μ ν");
System.out.println("exception value = " + ex.toString());
} }
```
μ½λμ€λͺ : ν¬μΈνΈμ»· ννμ excution(*read(String))μ μ΄ μ΄λλ°μ΄μ€κ° read(String)μλͺ μ΄ μλ λͺ¨λ λ©μλμ μ μ©λλ€ λ©μλκ° μ€νλκΈ° μ μ νΈμΆλκ³ μμμ λνλ΄λ λ©μμ§λ₯Ό μΈμν©λλ€. JoinPoint#getSignature()λ₯Ό μ¬μ©νμ¬ λ©μλ μλͺ μ κ²μνκ³ λ©μλ μ΄λ¦μ μΈμν©λλ€. λν JoinPoint#getArgs()λ₯Ό μ¬μ©νμ¬ λ©μλ μΈμλ₯Ό κ²μνκ³ μ²« λ²μ§Έ μΈμμ κ°μ μΈμν©λλ€.
@AfterReturning μ£Όμμ λμ λ©μλκ° μ±κ³΅μ μΌλ‘ λ°νλ ν μ£Όμμ΄ μ§μ λ λ©μλ(afterReturningMethod())κ° μ€νλ¨μ λνλ λλ€. pointcut μκ³Ό returning μμ±μ λμ λ©μλμ λ°ν κ°μ μΊ‘μ²νλ λ° μ¬μ©λ©λλ€. afterReturningMethod() λ©μλ λ΄λΆμ μ΄λλ°μ΄μ€ λ‘μ§μ΄ ꡬνλμ΄ μμ΅λλ€. μ€ν ν λ©μλκ° νΈμΆλμμμ λνλ΄λ λ©μμ§λ₯Ό μΈμν©λλ€. beforeMethod()μ μ μ¬νκ² λ©μλ μλͺ κ³Ό μΈμλ₯Ό κ²μνκ³ μΈμν©λλ€.
@AfterThrowing μ£Όμμ λμ λ©μλκ° μμΈλ₯Ό throwνλ κ²½μ° μ£Όμμ΄ μ§μ λ λ©μλ(afterThrowingMethod())κ° μ€νλ¨μ λνλ λλ€. ν¬μΈνΈμ»· ννμκ³Ό throwing μμ±μ λ°μν μμΈλ₯Ό μΊ‘μ²νλ λ° μ¬μ©λ©λλ€. afterThrowingMethod() λ©μλ λ΄λΆμ μ΄λλ°μ΄μ€ λ‘μ§μ΄ ꡬνλμ΄ μμ΅λλ€. λ©μλμμ μμΈκ° λ°μνμμ λνλ΄λ λ©μμ§λ₯Ό μΈμν©λλ€. λν μ 곡λ Throwable κ°μ²΄λ₯Ό μ¬μ©νμ¬ μμΈ μΈλΆ μ 보λ₯Ό μΈμν©λλ€.
μ΄ aspect ν΄λμ€λ βorg.tukorea.mywebβ ν¨ν€μ§μ read(String) λ©μλμ λν λ©μλ νΈμΆμ κ°λ‘μ±κ³ μ±κ³΅μ μΈ λ°ν μ , ν, ν λλ λμ λ©μλμμ μμΈλ₯Ό throwν ν μΆκ° λμμ μ 곡ν©λλ€