2021. 11. 15. 14:25ใSpring
1. Spring AOP ๊ตฌํ ๋ฐฉ๋ฒ
1๏ธโฃ XML ๊ธฐ๋ฐ์ POJO ํด๋์ค๋ฅผ ์ด์ฉํ AOP ๊ตฌํ
: ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ Advice ํด๋์ค๋ฅผ ์์ฑํ๊ณ , XML ์ค์ ํ์ผ์ <aop:config> ์ ์ด์ฉํด์ Aspect๋ฅผ ์ค์ ํ๋ค. (Advice์ Pointcut์ ์ค์ ํจ.)
2๏ธโฃ @Aspect ์ด๋ ธํ ์ด์ ์ ์ด์ฉํ AOP ๊ตฌํ
: @Aspect ์ด๋ ธํ ์ด์ ์ ์ด์ฉํด์ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ Aspect ํด๋์ค๋ฅผ ์์ฑํ๋ค.
Aspect ํด๋์ค์๋ Advice๋ฅผ ๊ตฌํํ๋ ๋ฉ์๋์ Pointcut์ ํฌํจํ๋ค.
๊ทธ๋ฆฌ๊ณ XML ์ค์ ํ์ผ์ <aop:aspectj-autoproxy/>์ ์ค์ ํ๋ค.
2. Advice ์ข ๋ฅ
1๏ธโฃ Aroud Advice
: Target์ ๋ฉ์๋๊ฐ ํธ์ถ๋๊ธฐ ์ด์ (Before) ์์ ๊ณผ ์ดํ (After) ์์ ์ ๋ชจ๋ ์ฒ๋ฆฌํด์ผํ ํ์๊ฐ ์๋ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ ์ํ๋ค. (joinPoint ์๊ณผ ๋ค์์ ์คํ๋๋ Advice)
2๏ธโฃ Before Advice
: Target์ ๋ฉ์๋๊ฐ ์คํ๋๊ธฐ ์ด์ (Before) ์์ ์ ์ฒ๋ฆฌํด์ผํ ํ์๊ฐ ์๋ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ ์ํ๋ค.
(joinpoint ์์์ ์คํ๋๋ Advice)
3๏ธโฃ After Returning Advice
: Target์ ๋ฉ์๋๊ฐ ์ ์์ ์ผ๋ก ์คํ๋ ์ดํ(After) ์์ ์ ์ฒ๋ฆฌํด์ผํ ํ์๊ฐ ์๋ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ ์ํ๋ค.
(joinpoint ๋ฉ์๋ ํธ์ถ์ด ์ ์์ ์ผ๋ก ์ข ๋ฃ๋ ๋ค์ ์คํ๋๋ Advice)
4๏ธโฃ After Throwing Advice
: Target์ ๋ฉ์๋๊ฐ ์์ธ๋ฅผ ๋ฐ์๋ ์ดํ(Ater) ์์ ์ ์ฒ๋ฆฌํด์ผ ํ ํ์๊ฐ ์๋ ๋ถ๊ฐ๊ธฐ๋ฅ์ ์ ์ํ๋ค.
(์์ธ๊ฐ ๋์ ธ์ง ๋ ์คํ๋๋ Advice)
3. Testํ Advice ํด๋์ค
: Advice๋ Target ๊ฐ์ฒด์ ๋ฉ์๋ ์คํ ์๊ฐ์ ๊ณ์ฐํด์ ์ถ๋ ฅํด์ฃผ๋ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ํด๋์ค๋ฅผ ๋ง๋ค ๊ฒ์ด๋ค.
Advice ์ ํ์ Target๊ฐ์ฒด์ ์ ํ๋ก ๋์ํด์ผํ๊ธฐ ๋๋ฌธ์ Around Advice๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ค.
1๏ธโฃ JoinPoint ์ธํฐํ์ด์ค
: JoinPoint ์ธํฐํ์ด์ค๋ Spring AOP ํน์ AspectJ์์ AOP๊ฐ ์ ์ฉ๋๋ ์ง์ ์ ์๋ฏธํ๋ค.
- JoinPoint ์ธํฐํ์ด์ค๊ฐ ์ ๊ณตํ๋ ๋ฉ์๋
getArgs() : ๋ฉ์๋์ Arguments๋ฅผ ๋ฐํํ๋ค.
getThis() : ํ๋ก์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
getTarget() : ๋์ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
getSignature() : Advice ๋๋ ๋ฉ์๋์ ์ค๋ช ์ ๋ฐํํ๋ค.
toString() : Advice๋๋ ๋ฉ์๋์ ์ค๋ช ์ ์ถ๋ ฅํ๋ค.
2๏ธโฃ ProceedingJoinPoint ์ธํฐํ์ด์ค
-> Around Advice๋ Joinpoint์ ํ์ ํด๋์ค์ธ ProceedingJoinPoint ํ์ ์ ํ๋ผ๋ฏธํฐ๋ฅผ ํ์์ ์ผ๋ก ์ ์ธํด์ผํ๋ค.
3๏ธโฃ Advice ํด๋์ค
4๏ธโฃ Adviceํด๋์ค๋ฅผ XML ์ค์ ํ์ผ์ Bean์ผ๋ก ๋ฑ๋กํ๊ธฐ
<aop:context> : AOP ์ค์ ์ ๋ณด์์ ๋ํ๋ธ๋ค.
-> ref ์์ฑ์ Aspect๋ก์ ๊ธฐ๋ฅ์ ์ ๊ณตํ Bean์ ์ค์ ํ ๋ ์ฌ์ฉ
<aop:aspect> : Aspect๋ฅผ ์ค์ ํ๋ค.
<aop:around pointcut="execution()"> : Around Advice์ pointcut์ ์ค์ ํ๋ค.
-> pointcut ์์ฑ์ execution ์ง์์๋ Advise๋ฅผ ์ ์ฉํ ํจํค์ง, ํด๋์ค, ๋ฉ์๋๋ฅผ ํํํ ๋ ์ฌ์ฉํจ .
5๏ธโฃ Advice ํด๋์ค ํ ์คํธ ์ฝ๋ ์์ฑ ๋ฐ ํ ์คํธ ์ํ
4. Advice ํ๊ทธ
1๏ธโฃ <aop:before>
: ๋ฉ์๋ ์คํ ์ ์ ์ ์ฉ๋๋ Advice๋ฅผ ์ ์ํ๋ค.
2๏ธโฃ <aop : after-returning>
: ๋ฉ์๋๊ฐ ์ ์์ ์ผ๋ก ์คํ๋ ํ์ ์ ์ฉ๋๋ Advice๋ฅผ ์ ์ํ๋ค.
3๏ธโฃ <aop : after-throwing>
: ๋ฉ์๋๊ฐ ์์ธ๋ฅผ ๋ฐ์์ํฌ ๋ ์ ์ฉ๋๋ Advice๋ฅผ ์ ์ํ๋ค.
try-catch ๋ธ๋ก์์ catch๋ธ๋ก๊ณผ ๋น์ทํจ.
4๏ธโฃ <aop : after>
: ๋ฉ์๋๊ฐ ์ ์์ ์ผ๋ก ์คํ๋๋์ง ๋๋ ์์ธ๋ฅผ ๋ฐ์์ํค๋์ง ์ฌ๋ถ์ ์๊ด์์ด Advice๋ฅผ ์ ์ํ๋ค.
5๏ธโฃ <aop:around>
: ๋ฉ์๋ ํธ์ถ ์ด์ , ์ดํ, ์์ธ๋ฐ์ ๋ฑ ๋ชจ๋ ์์ ์ ์ ์ฉ ๊ฐ๋ฅํ Advice๋ฅผ ์ ์ํ๋ค.
5. PointCut ํํ์
execution([์ ๊ทผ์ ํ์ ํจํด] ํ์ ํจํด [ํ์ ํจํด.] ์ด๋ฆํจํด (ํ์ ํจํด| "..", ...) [throws ์์ธํจํด])
1๏ธโฃ [์ ๊ทผ์ ํ์ ํจํด]
: public, private ์ ๊ฐ์ ์ ๊ทผ์ ํ์, ์๋ต๊ฐ๋ฅ
2๏ธโฃ ํ์ ํจํด
: ๋ฆฌํด๊ฐ์ ํ์ ํจํด
3๏ธโฃ [ํ์ ํจํด.]
: ํจํค์ง์ ํด๋์ค ์ด๋ฆ์ ๋ํ ํจํด, ์๋ต๊ฐ๋ฅํ๋ฉฐ ์ฌ์ฉํ ๋ '.'์ ์ฌ์ฉํด ์ฐ๊ฒฐํจ.
4๏ธโฃ ์ด๋ฆํจํด
: ๋ฉ์๋ ์ด๋ฆ ํ์ ํจํด
5๏ธโฃ (ํ์ ํจํด| "..", ...)
: ํ๋ผ๋ฏธํฐ์ ํ์ ํจํด์ ์์๋๋ก ๋ฃ์ ์ ์๋ค.
6๏ธโฃ [throws ์์ธํจํด]
: ์์ธ ์ด๋ฆ ํจํด
-> myspring.user.serivce ํจํค์ง์ ๋ชจ๋ ํด๋์ค์ ..์ ์ฌ์ฉํด ์๋ธ ํจํค์ง์ ํด๋์ค๊น์ง ํฌํจํ๋ค.