๋ฐ์ํ
AOP ์ ํต์ฌ : ํฉ์ด์ง ์ฝ๋๋ฅผ ํ๊ณณ์ผ๋ก ๋ชจ์ผ๋ ์ฝ๋ฉ ๊ธฐ๋ฒ
ํฉ์ด์ง AAAA ์ BBBB
class A {
method a () {
AAAA
์ค๋์ 7์ 4์ผ ๋ฏธ๊ตญ ๋
๋ฆฝ ๊ธฐ๋
์ผ์ด๋์.
BBBB
}
method b () {
AAAA
์ ๋ ์์นจ์ ์ด๋์ ๋ค๋
์์ ๋ฐฅ๋จน๊ณ ๋นจ๋๋ฅผ ํ์ต๋๋ค.
BBBB
}
}
class B {
method c() {
AAAA
์ ์ฌ์ ์ด๊ฑฐ ์ฐ๋๋ผ ๋ชป๋จน์๋๋ฐ ์ ๋
์ ์ ์ก๋ณถ์์ ๋จน๊ณ ์ถ๋ค์.
BBBB
}
}
AAAA , BBBB ๋ฅผ ๋ฐ์ผ๋ก ๋นผ๋ฒ๋ฆฐ๋ค.
๋ชจ์ ๋์ AAAA ์ BBBB
class A {
method a () {
์ค๋์ 7์ 4์ผ ๋ฏธ๊ตญ ๋
๋ฆฝ ๊ธฐ๋
์ผ์ด๋์.
}
method b () {
์ ๋ ์์นจ์ ์ด๋์ ๋ค๋
์์ ๋ฐฅ๋จน๊ณ ๋นจ๋๋ฅผ ํ์ต๋๋ค.
}
}
class B {
method c() {
์ ์ฌ์ ์ด๊ฑฐ ์ฐ๋๋ผ ๋ชป๋จน์๋๋ฐ ์ ๋
์ ์ ์ก๋ณถ์์ ๋จน๊ณ ์ถ๋ค์.
}
}
class AAAABBBB {
method aaaabbb(JoinPoint point) {
AAAA
point.execute()
BBBB
}
}
AOP ์ ์ฉ์ ๋๊ฐ์ง ๋ฐฉ๋ฒ
1. byte ์ฝ๋ ์กฐ์
.class ํ์ผ์ ์ด๋ฏธ ์ปดํ์ผ ๋ ์ฝ๋ ์์๋ค๊ฐ ๋ผ์๋ฃ๋ ๋ฒ.
์ค์ ์ฝ๋๋ ๋ค๋ฅด๊ฒ ๋ง์น ๋ค๋ฅด๊ฒ ์ง์ฌ์ง ์ฝ๋ ์ฒ๋ผ ๋์ํ๊ฒ๋ ํ๋ ๋ฒ.
2. Proxy ํจํด ์ฌ์ฉ : Spring์์๋ ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉ
class A {
method a () {
์ค๋์ 7์ 4์ผ ๋ฏธ๊ตญ ๋
๋ฆฝ ๊ธฐ๋
์ผ์ด๋์.
}
method b () {
์ ๋ ์์นจ์ ์ด๋์ ๋ค๋
์์ ๋ฐฅ๋จน๊ณ ๋นจ๋๋ฅผ ํ์ต๋๋ค.
}
}
class AProxy extends A{
// AAAA ํธ์ถ๋๋ฉด method a() ํธ์ถํ๊ฒ ํ๊ณ , ๊ทธ ๋ค์ BBBB ํธ์ถ ํ๊ฒ ํ๋ค
}
class B {
method c() {
์ ์ฌ์ ์ด๊ฑฐ ์ฐ๋๋ผ ๋ชป๋จน์๋๋ฐ ์ ๋
์ ์ ์ก๋ณถ์์ ๋จน๊ณ ์ถ๋ค์.
}
}
class AAAABBBB {
method aaaabbb(JoinPoint point) {
AAAA
point.execute()
BBBB
}
}
๋ฐ์ํ