- ๋ชจ๋ํ : ์ด๋ค ๊ณตํต๋ ๋ก์ง,๊ธฐ๋ฅ์ ํ๋์ ๋จ์๋ก ๋ฌถ๋ ๊ฒ
- ํต์ฌ ๊ด์ฌ : ์ ์ฉํ๊ณ ์ ํ๋ ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง
- ํก๋จ ๊ด์ฌ : ํต์ฌ ๋ก์ง์ ์คํํ๊ธฐ ์ํ ๊ณตํต ๋ก์ง, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ, ๋ก๊น , ํ์ผ ์ ์ถ๋ ฅ ๋ฑ
- Aspect : ์ ํ๋ฆฌ์ผ์ด์ ํต์ฌ ๊ธฐ๋ฅ์ ์๋์ง๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑํ๋ ์ค์ํ ์์์ด๊ณ ๋ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ๋ด๋นํ๋ ์์
์ฝ๋ ์์ฒด๋ฅผ ์์ ํ์ง ์๊ณ ๊ธฐ์กด์ ์ฝ๋์ ์ถ๊ฐ ๋์(Advice)๋ฅผ ์ถ๊ฐํด์ ์ํํ๊ณ
๋ฆฌํดํ์ | ํจํค์ง ๊ฒฝ๋ก | ํด๋์ค๋ช | ๋ฉ์๋๋ช ,๋งค๊ฐ ๋ณ์ |
---|---|---|---|
* | com.study.aop.. | *Impl. | *(..) |
// Pointcut ์์
* com.study.aop..*Impl.*(..)
๋ฆฌํดํ์ ๊ณผ ํจํค์ง ๊ฒฝ๋ก ์ฌ์ด๋ ๊ณต๋ฐฑ ์ด ๋ค์ด๊ฐ๋ค.
XML์ ์ด์ฉํ AOP ๊ตฌํ
Advice ํด๋์ค ์์ฑ (๋ถ๊ฐ ๊ธฐ๋ฅ ์ ๊ณต)
XML ์ค์ ํ์ผ์ <aop:config></aop:config> ๋ฅผ ์ด์ฉํด์ Aspect ์ค์
Advice ์ Pointcut ์ค์ ํ๋ค.
// Advice ํด๋์ค ์์ฑ
public class LogAdvice {
public void printLog() {
System.out.println("[๊ณตํต ๋ก๊ทธ]");
}
}
// XML ์ค์ ํ์ผ์ ์ถ๊ฐ
<aop:config>
<aop:pointcut id="allPointcut" expression="execution(* com.study.aop..*Impl.*(..))"/>
<aop:aspect ref="log">
<aop:before pointcut-ref="allPointcut" method="printLog"/>
</aop:aspect>
</aop:config>
- <aop:config></aop:config> ๋ธ๋ก ์์์ pointcut, aspect ์ฝ๋ ์์ฑ
- pointcut ์์ฑ ์ id๋ ์ ๋ํฌํด์ผ ํ๋ค. -> ์ค๋ณต X
- โ๏ธ Aspect ์คํ ์์ (Advice ์คํ ์์ )
- Before : ๋น์ฆ๋์ค ๋ฉ์๋ ํธ์ถ๋๊ธฐ ์ ์ Advice ์คํ (์ด์ )
- After : ๋น์ฆ๋์ค ๋ฉ์๋ ํธ์ถ๋ ํ ๊ฒฐ๊ณผ์ ๊ด๊ณ์์ด Advice ์คํ (์ดํ) -> ๋ฌด์กฐ๊ฑด ์คํ
- After Returning : ๋น์ฆ๋์ค ๋ฉ์๋๊ฐ ์ฑ๊ณต์ ์ผ๋ก ๊ฒฐ๊ณผ๊ฐ์ ๋ฐํํ ํ์ Advice ์คํ (์ ์์ ,์ฑ๊ณต์ ๋ฐํ ์ดํ)
- After Throwing : ๋น์ฆ๋์ค ๋ฉ์๋๊ฐ ์คํ ์ค ์์ธ ๋ฐ์ํ๋ฉด Advice ์คํ (์์ธ ๋ฐ์ ์ดํ)
- Around : ๋น์ฆ๋์ค ๋ฉ์๋ ์คํ ์ ,ํ์ ์ฒ๋ฆฌ ๋ก์ง์ ์ฝ์ Advice ์คํ (๋น์ฆ๋์ค ๋ฉ์๋ ์คํ ์ ํ)
์ฐธ๊ณ