Spring/02 Spring DI와 AOP

11 AOP의 개념과 용어

라타노 2023. 7. 7. 20:53
반응형

AOP의 개념과 용어

1) 공통코드의 분리

 

1-1) 공통코드의 분리 (실습)

AopMain.java(com.fastcampus.ch3.aop 패키지에 작성)

>> 추가할 코드를 따로 분리해 작성해 놓고, 그 코드가 마치 추가된 것처럼 실행되는데 AOP

 

1-2) 공통코드의 분리 (응용1)

>> a로 시작하는 패턴의 메서드만 실행하게 된다

 

1-2) 공통코드의 분리 (응용2)

>> 에너테이션으로 출력

 

 

2) 코드를 자동으로 추가한다면 어디에?

- 메서드 중간에는 넣을 수 없다

>> Advice{ } : 자동 추가할 코드

>> Before Advice : 메서드의 시작에 자동 추가

>> After Advice : 메서드의 끝에 자동 추가 >> Around Advice : 양쪽에 자동 추가

 

 

 

3) AOP(Aspect Oriented Programming)?

- 관점 지향 프로그램 or 횡단 관심사 or cross-cutting concerns?

- 부가기능(advice)을 동적으로 추가해주는 기술

- 메서드의 시작 또는 끝에 자동으로 코드(advice)를 추가

동적: 코드가 실행중에 자동으로 추가되는 것

>> Customer Service, Sales, Ware House는 각각의 모듈이 달라도

                Logging, Transaction, Security는 공통으로 사용된다 (횡단 관심사)

 

 

4) AOP 관련 용어

>> oopAOP의 목적은 변경에 유리한 코드를 만드는 것 (분리)

 

 

5) Advice의 종류

- Advice의 설정은 XML과 애너테이션, 두 가지 방법으로 가능

 

 

6) pointcut expression

- advice가 추가될 메서드를 지정하기 위한 패턴

  execution(접근제어자(생략가능). 반환타입 패키지명. 클래스명. 메서드명(매개변수 목록))

>> @Before + @After = @Around

>> ProceedingJoinPoint pjp // 메서드의 모든 정보가 들어있다

     ①번의 getName( )은 메서드 이름, pjp.getArgs( )는 매개변수 // 메서드의 모든 정보를 제공

     반환 타입은 Object

 

>> LogginAdivce가 여러개 적용되는 경우에는 @Order( ) 사용

      ex) @Order(1) @Order(2) @Order(3) class LogginAdvice위에 사용됨

 

 

 

7) 실습

- AOP 기능을 사용하기 위해 관련 라이브러리 다운로드

pom.xml

>> maven repository에서 aspectjrt, spring-aop, aspectjweaver 다운

 

 

MyMath.java

 

root-context_aop.xml (webapp/WEB-INF/spring/root-context_aop.xml생성)

 

 

AopMain2.java

>> 출력 결과 확인

 

 

 

LoggingAdvice.java

>> @Component @Aspect @Around aop로 사용하기 위해 등록

 

 

AopMain2.java(변경)

>> add 메서드만 적용되어 출력되었다

 

 

 

 

반응형