본문 바로가기
블로그 이미지

방문해 주셔서 감사합니다! 항상 행복하세요!

  
   - 문의사항은 메일 또는 댓글로 언제든 연락주세요.
   - "해줘","답 내놔" 같은 질문은 답변드리지 않습니다.
   - 메일주소 : lts06069@naver.com


Spring framework

Spring 또는 전자정부, AOP가 되지 않는 경우

야근없는 행복한 삶을 위해 ~
by 마샤와 곰 2019. 4. 29.

 

 

스프링을 사용하는 주된 이유중 하나는 바로 AOP라는 강력한 기능 때문이다.

전자정부에서도 이러한 AOP를 사용해서 중복되는 작업을 분리하는데..

간혹 AOP설정을 아무리 잘 했다고 생각하더라도 되지 않는 경우가 발생한다.

예를들어..컨트롤러에는 안걸리면서 인터페이스를 상속받은 서비스에만 걸리는 경우를 만나기도한다.

그 이유는..스프링 AOP는 2가지 방식이 존재한다.

JDK Dynamic Proxy, CGLIB를 이용하여 프록시를 생성하는 방식이다.

돌아다니는 소스코드나 예제는 JDK Dynamic Proxy방식을 활용하는 경우가 많은데..

해당 구현 방식은 인터페이스를 기반으로 프록시 객체를 생성하기 때문에 인터페이스에 정의되어 있지 않은 메서드에 대해서는 AOP가 적용되지 않는다.

그럴경우에는..CGLIB를 이용한 방식을 적용시키면 되는데..

CGLIB 방식은 간단하게 @EnableAspectJAutoProxy 에노테이션을 선언함으로서 스프링이 스스로 프록시 객체를 생성하게 해준다. 또는 아래와 같은 방법으로도 가능하다.

* xml 설정에 해당 속성을 주는법

- <aop:aspectj-autoproxy proxy-target-class="true"/>

- 해당 방법은 final한 객체가 존재하면 fail 이 된다. 조금 까다롭다.

대규모의 서비스나 복잡한 프로젝트가 아니면 그냥 @EnableAspectJAutoProxy를 사용하는 것이 편하다.

반응형
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)

댓글