짱아의 개발 기록장

9강. AOP 본문

반응형

Spring은 크게 IoC, AOP, PSA 3가지의 개념을 제공해준다.

이 개념은 Spring의 Triangle이라고 부른다.

* AOP(Aspect Oriented Programming) = 흩어진 코드를 한 곳으로 모아

ex)

class A {

      method a () {

                AAAA->AAA

                오늘은 치킨을 먹는 날이에요.

                BBBB->BB

     }

     method b () {

                AAAA->AAA

                오늘은 달콤한 디저트를 먹는 날이에요.

                BBBB->BB

     }

}

 

class B {

     method c () {

                AAAA->AAA

                오늘은 그냥 너무 우울한 날이어서 불닭을 먹을 거에요.

                BBBB->BB

     }

}

 

같은 클래스 다른 메소드, 다른 클래스 다른 메소드에서

똑같은 일을 반복하는 AAAA가 AAA로 바뀌어야 한다면???

AAAA라는 동작을 하는 모든 메소드, 클래스에서 다 AAA로 일일히 바꿔줘야 한다....(매우 귀찮, 복잡;;)

모아놓은 AAAA와 BBBB

class A {

      method a () {

                오늘은 치킨을 먹는 날이에요.

     }

     method b () {

                오늘은 달콤한 디저트를 먹는 날이에요.

     }

}

 

class B {

     method c () {

                오늘은 그냥 너무 우울한 날이어서 불닭을 먹을 거에요.

     }

}

 

class AAAABBBB {

      method aaaabbbb(JoinPoint point) {

                AAAA

                point.execute()

                BBBB

      }

}

// AAAA와 BBBB동작을 별도의 클래스, 별도의 메소드로 빼놓은 것이다.

 

 

*대표적으로, 프로젝트에서는 다음과 같은 AOP가 일어난다.

@Transactional으로 명시된 곳이 대표적으로 AOP가 일어나는 곳이다,

다양한 AOP 구현 방법

- 컴파일

- 바이트코드 조작

- 프록시 패턴

1. 컴파일

A.java ------->(AOP)------> A.class (AspectJ)

A.java파일을 컴파일하는 과정에서 AOP를 해주는 것을 의미한다.

컴파일을 하는 과정에서 원하는 원하는 코드가 자동적으로 주입되는?

2. 바이트코드 조작

A.java ---------> A.class ------>(AOP)-----> 메모리 (AspectJ)

A.java파일을 컴파일을 하면 A.class가 만들어지는데, 이때 class loader가 A.class를 읽어와서 메모리상에 올리게 된다,

메모리 상에 올릴때 AOP를 해주는 것이다.

즉, 메모리상에 올리는 과정에서 원하는 코드가 자동적으로 주입되는?

3. 프록시 패턴

다음 강에 더 자세하게 다루신다고 한다! 고고~

반응형
Comments