Aspects 모듈은 AspectJ의 애스팩트를 직접 사용하는 경우에 필요로 하는 aspect들을 모은 것이다.

스프링이 사용하는 AspectJ의 애스팩트는 2가지가 있다.

하나는 @Configurable과 같이 bean factory의 DI에 적용하는 경우이다. AbstractDependencyInjectionAspect.aj 가 대표적인 예이다. AspectJ AOP를 이용해서 특정 오브젝트의 생성시점을 포인트컷팅해서 그 오브젝트에 오토와이어링 방식의 DI를 수행한다. 3자 라이브러리와 같은 곳에서 생성된, 스프링이 직접 관리하지 않는 오브젝트에 DI를 적용할 때 사용한다. AspectJ의 도움없이는 불가능하다.

또 한가지 사용처는 트랜잭션 AOP를 SpringAOP방식이 아닌 AspectJ 방식을 사용할 경우이다. Method Interceptor방식을 이용하는 스프링의 경우 같은 오브젝트(타겟 오브젝트)의 메소드를 호출하는 경우 인터셉팅이 불가능하다. 이 경우 트랜잭션 어드바이스를 적용할 수 없다. 결국 이를 위해서 더 로우레벨의 바이트코드 조작이 필요하고 AspectJ AOP를 적용한다. 이때 적용되는 애스팩트가 정의되어있는 곳도 Aspects 모듈이다.

 

Aspects Module Optional Libraries

AspectJ Weaver (Runtime)

재미있게도 AspectJ AOP의 aspect(.aj)를 정의해놓은 이 모듈에서 AspectJ Weaver는 optional이다. 잘못 설정된 것이 아닌가 생각될 수 있다. 대부분 aj 파일이기 때문에 어짜피 컴파일시에는 필요하지 않지만 런타임시에는 AspectJ weaver가 사용되어야 하기 때문에 compile scope는 아니더라도 jdbc 드라이버처럼 runtime scope는 가져야 할 것 같은데 설정은 optional 이다.

왜 일까?

Optional 인 이유는 구지 weaver가 없어도 이 aspect들을 적용할 방법이 있기 때문이다. AspectJ는 런타임 시의 바이트코드 조작 방식인 weaver외에도 사전 aspectj compiler를 사용해서 아예 클래스 파일 생성 때 aspect들을 적용할 수도 있기 때문이다.

따라서 weaver는 선택이다. 구지 빌드의 번거로움을 조금 더 하더라도 런타임시의 로딩시점의 성능을 좀 더 향상시키고자 한다면 컴파일러 방식을 선택할 수 있다. 심지어 이클립스에서 AJDT를 사용하면 자동빌드에서 aj파일을 이용해서 컴파일도 해준다.

하지만 대부분의 경우 aspectj weaver가 편리하다.

 

Aspects 모듈 자체는 선택적으로 적용할 수 있어도 weaver는 필수로 넣는 것이 좋겠다.

 

Transaction Module

Aspects 모듈은 스프링의 Tx Module을 optional로 의존하고 있다. 트랜잭션 aspect가 트랜잭션 모듈의 TransactionAspectSupport를 의존하고 있기 때문이다. Aspects 모듈을 쓴다고 해도 Transaction AOP에 적용하지 않는 경우도 많기 때문에 이 자체가 optional로 설정되어있다.

개념적으로 보자면 트랜잭션 모듈이 Aspects 모듈에 의존적이라고 볼 수도 있다. 하지만 AOP의 특성을 생각해볼 때 오히려 트랜잭션 모듈에는 투명하게 존재하면서 필요에 따라 트랜잭션의 일부 기능을 확장해서 애스팩트를 정의해서 사용할 수 있다고 본다면 애스팩트가 트랜잭션에 optional하게 의존한다고 보는 것이 더 타당할 것 같다.

 

이 부분은 optional로 그대로 놔둬도 무방하다. 왜냐하면 트랜잭션 애스팩트를 적용할 환경이라면 이미 Jdbc, Tx 모듈을 모두 포함시켰을 것이기 때문이다. 여기서는 단지 컴파일 의존관계와 기능 적용의 선택조건이 붙어있을 뿐이다.

Related posts:

  1. Spring 3.0 (10) AOP 모듈의 선택 라이브러리 분석
  2. Spring 3.0 (8) Core 모듈의 선택 라이브러리 분석
  3. Spring 3.0 (16) Jms 모듈의 선택 라이브러리 분석
  4. Spring 3.0 (13) Context 모듈의 선택 라이브러리 분석
  5. Spring 3.0 (14) Context Support 모듈의 선택 라이브러리 분석
  6. Spring 3.0 (21) Web 모듈의 선택 라이브러리 분석
  7. Spring 3.0 (22) Web.Servlet 모듈의 선택 라이브러리 분석
  8. Spring 3.0 (20) Transaction 모듈의 선택 라이브러리
  9. Spring 3.0 (50) JUnit 4.5~4.7 겨우 지원성공 그리고 계속되는 악몽
  10. Spring 상식퀴즈 (1) – DI 태클하기 해답편
  11. Spring 3.0 (25) Spring 3.0 빌드, 배포, 모듈과 라이브러리의 의존관계 분석 그 이후
  12. 테스트 할 수 없는 것을 테스트 하기. Spring ROO와 static method mocking.
  13. Spring 3.0 (23) Web.Portlet 모듈 선택라이브러리 분석
  14. 토비의 스프링 3 간략 목차
  15. Spring 2.0의 XML확장기능 (1)

Facebook comments:

to “Spring 3.0 (11) Aspects 모듈의 선택 라이브러리 분석”

  1. Click HERE For More Info

  2. The next time I read a blog, I hope that it doesnt disappoint me as much as this one.I mean, I know it was my choice to read, but I actually thought youd have something interesting to say.All I hear is a bunch of whining about something that you could fix if you werent too busy looking for attention.

  3. Click Here For More Info

  4. thanks for share!

  5. thank you for share!

  6. thank you for share!

  7. Go Here
    [url=http://www.zaxw.org/images/navbgk.php?/nike-air-max-assail-6-air-max-new.html]nike air max assail 6-air max-new[/url]
    nike air max assail 6-air max-new

  8. thanks for share!

  9. Look At THIS Site
    [url=http://www.keyiv.com/member/floato.php?/burberry-kilt-burberry-buy-cheap.html]burberry kilt-burberry-buy cheap[/url]
    burberry kilt-burberry-buy cheap

  10. Hop Over To These Guys
    [url=http://outlettonlineshop.com]ugg outlet store[/url]
    ugg outlet store

  11. Check This Site Out
    [url=http://cheapbaileybuttonoutlet.com]bailey button uggs[/url]
    bailey button uggs

  12. cheap mbt shoes Spring 3.0 (11) Aspects 모듈의 선택 라이브러리 분석 » Toby’s Epril

  13. massai shoes Spring 3.0 (11) Aspects 모듈의 선택 라이브러리 분석 » Toby’s Epril

  14. If you wish for to obtain much from this paragraph then you have to apply such methods to your won weblog.

    Also visit my website; cheap madden 17 coins
    (Louvenia)

Leave a Reply

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

© 2017 Toby's Epril Suffusion theme by Sayontan Sinha