springframework

o.s.w IoC 핵심기술. AOP 개요.

Jungsoomin :) 2020. 9. 17. 19:41

스프링 AOP는 개인적으로

@Around 메서드 실행전후 리턴, 및 예외송출 구간

@AfterThrowing 예외송출 구간

@AfterReturning 무사히 리턴됬을시

@Before 메서드 실행전 

 

정도로 기본적으로 사용해보고 

 

Signature  객체와 ProceedingJoinPoint 를 이용한 로깅에 사용해보았었다.

 

  1. joinPoint 는 메서드들에 끼어들 수 있는 지점을 의미한다.
  2. PointCut 은 명확히 설정한 지점을 의미한다.
  3. Aspect는 공통기능, Target 은 aop적용대상이다.
  4. Advice는 Aspect를 품은 모듈이다.
  5. Spring-AOP는 메서드 실행에서만 JoinPoint를 제공한다.
  6. 끼워 넣는 것을 Weaving 이라고 한다.

 

자바에서 사용하는것은 aspect-jspring aop 이다.

적용구간은 컴파일, 로드타임, 런타임 이다.

스프링 Spring-aop는 런타임 적용구간을 제공한다.

 

 

빈을 만들때에 구동속도에 영향을 미치지만 이후에는 비용이 크게 들지않아 큰 부하를 주지는 않는다.

 

Aspect-j 가 필요한 순간도 분명 있기 때문에 추후에 aspect-j를 배우며 컴파일, 로드타임에도 적용할 수 있는 것이 좋다.

 


비즈니스 핵심 로직은 아니지만, 반드시 필요한, 

  1. tx
  2. logging
  3. SpringSecurity

등  공통적으로 나타나며, 또한 중복되는 횡단 관심사들(cross-cutting concerns) 을 하나의 Aspect 즉 공통기능으로 두어 Advice로 모듈화하고 JoinPointPointCut을 지정하여 Weaving aop를 적용한다.

 

Proxy는 Target객체를 필드로 가지는 겉 껍데기 객체쯔음 으로 생각한다.

 

자신의 메서드를 실행하고 필드로 엮인 Target의 메서드를 실행한다..하며.

 

@Order와 AOP의 흐름, ( 시작 -> Target 메서드 완료 -> 역순으로 리턴) 같은 기본적인 것들 을 기억한다.

 

ProceedingJoinPoing의 아규먼트 추출법..같은 것 말이다.

 

@EnableAspectjAutoProxy 에노테이션으로 프록시를 만드는 설정을 지정하며, Target이 어느 인터페이스의 구현객체일 경우 구현하고있는 인터페이스를 구현하기 때문에, Target을 Context에서 가져올 수 없다. 

 

이를 위해서는 속성에 ProxyTargetClass 를 true로 주고 상속받은 클래스를 이용해야한다.

 


Aspect-j 가 필요한 순간도 분명 있기 때문에 추후에 aspect-j를 배우며 컴파일, 로드타임에도 적용할 수 있는 것이 좋다.

 

여기까지 개요이다.