1 λΆ„ μ†Œμš”

πŸ“˜ AOP에 λŒ€ν•΄μ„œβ€¦


AOPλž€?

  • Aspect : 관점 (핡심)
  • ν”„λ‘μ‹œ (Proxy) : μ€‘μš”(핡심)κΈ°λŠ₯을 λŒ€μ‹  μˆ˜ν–‰
  • AOP : β€œλŒ€μ‹  핡심 κΈ°λŠ₯을 μˆ˜ν–‰ν•œλ‹€β€ -> ν”„λ‘μ‹œ ν˜•νƒœλ‘œ!

AOP μ• λ…Έν…Œμ΄μ…˜

  • @Aspect 곡톡 κΈ°λŠ₯을 μ •μ˜ν•œ 클래슀
  • @Pointcut : 곡톡 κΈ°λŠ₯의 적용 λ²”μœ„
  • @Around : 곡톡 κΈ°λŠ₯, 핡심 κΈ°λŠ₯을 λŒ€μ‹  μˆ˜ν–‰ν•΄μ£ΌλŠ” λ©”μ„œλ“œ
    • λ°˜ν™˜κ°’ : Object
    • λ§€κ°œλ³€μˆ˜ : ProceedingJoinPoint joinPoint.proceed() //핡심 λ©”μ„œλ“œ λŒ€μ‹  호좜
  • @EnableAspectAutoProxy : μ„€μ • 뢀뢄을 μžλ™ν™” μ‹œμΌœμ£ΌλŠ” μ• λ…Έν…Œμ΄μ…˜

ν”„λ‘μ‹œ μ‹€ν–‰ μˆœμ„œ μ„€μ •

  • ν”„λ‘μ‹œλŠ” 기본적으둜 μΈν„°νŽ˜μ΄μŠ€λ₯Ό 기반으둜 싀행됨 (μΈν„°νŽ˜μ΄μŠ€λ₯Ό μƒμ†λ°›μŒ)
  • ProxyTargetClass -> true -> 클래슀 기반 ν”„λ‘μ‹œ

    μˆœμ„œ μ„€μ • 방법

    1. κΈ°λ³Έμ μœΌλ‘œλŠ” Bean λ“±λ‘λœ μˆœμ„œλŒ€λ‘œ μ‹€ν–‰
    2. @Order(μˆœμ„œ) : ν”„λ‘μ‹œκ°€ μˆ˜ν–‰λ˜λŠ” μˆœμ„œ 지정

파일 μœ„μΉ˜ μ ‘κ·Ό 방법 (execution λͺ…μ‹œμž)

  • μ ‘κ·Όμ œν•œμž λ°˜ν™˜κ°’ νŒ¨ν‚€μ§€λͺ….클래슀λͺ… λ©”μ„œλ“œ (…)
  • ex) public * aopex..

    • : λͺ¨λ“  κ°’
  • aopex.* : aopex νŒ¨ν‚€μ§€μ˜ λ°”λ‘œ ν•˜μœ„μ˜ λͺ¨λ“  클래슀
  • aopex..* : aopex νŒ¨ν‚€μ§€λ₯Ό ν¬ν•¨ν•˜κ³ , κ·Έ ν•˜μœ„μ˜ λͺ¨λ“  νŒ¨ν‚€μ§€μ˜ 클래슀

  • () : λ§€κ°œλ³€μˆ˜κ°€ μ—†λŠ” λ©”μ„œλ“œ
  • (..) : 0개 μ΄μƒμ˜ λ§€κ°œλ³€μˆ˜ (λ§€κ°œλ³€μˆ˜κ°€ μžˆμ–΄λ„ 되고, 없어도 됨 - λͺ¨λ“  λ©”μ„œλ“œ)
  • (*) : 1개의 λ§€κ°œλ³€μˆ˜
  • (,) : 2개의 λ§€κ°œλ³€μˆ˜
  • (Integer, ..) : 첫 번쨰 λ§€κ°œλ³€μˆ˜μ˜ νƒ€μž…μ€ Integer

예제

μ• μŠ€ν„°λ¦¬μŠ€ν¬
aopex.* : aopex λ°”λ‘œ ν•˜μœ„ 클래슀

..*
aopex..* : aopex νŒ¨ν‚€μ§€λ₯Ό ν¬ν•¨ν•œ λͺ¨λ“  ν•˜μœ„ νŒ¨ν‚€μ§€μ˜ 클래슀

()
λ§€κ°œλ³€μˆ˜ μ—†μŒ

(..)
0개 μ΄μƒμ˜ λ§€κ°œλ³€μˆ˜

(*)
1개의 λ§€κ°œλ³€μˆ˜

(,)
2개의 λ§€κ°œλ³€μˆ˜

(Long, ..)
첫 번째 λ°°κ°œλ³€μˆ˜μ˜ νƒ€μž…μ€ Long


νƒœκ·Έ:

μΉ΄ν…Œκ³ λ¦¬:

μ—…λ°μ΄νŠΈ:

λŒ“κΈ€λ‚¨κΈ°κΈ°