복습해보자면, 로드타임 위버는 클래스 로딩 시점에 바이트코드의 조작이 가능하도록하여 일반 클래스에도 AOP 처리가 가능하도록 해준다.
1. Spring이 제공하는 로드타임 위버의 특징
- JPA에서 필요로 하는 로드타임 위버로도 사용된다. JVM의 자바에이전트 옵션은 한 번에 한 가지만 적용할 수 있는 문제가 해결된다.
- JVM 레벨의 자바에이전트를 대체할 수 있는 적합한 로드타임 위버를 등록해준다. 클래스 로더 레벨에 로드타임 위빙 기능을 적용함으로써, JVM을 통해 로딩되는 모든 클래스를 조사해야 하는 문제가 해결된다.
- 바이트코드 조작이 필요한 새로운 기술이 추가되더라도 일관된 방식으로 로드타임 위버를 적용할 수 있다.
2. Spring이 적용해주는 로드타임 위버의 구현 방식
xml 설정 파일에 <context:load-time-weaver />를 추가해주면 아래의 구현 방식들 중에서 하나가 적용된다.
1) WAS 전용 로드타임 위버
- 애플리케이션 서버가 WebLogic, OC4J, GlassFish, JBossAS 중에서 하나일 때 적용된다.
- JVM에 자바에이전트를 설정할 필요가 없다.
2) JVM 자바에이전트
- 1)에서 설명한 WAS 환경이 아니면서, Spring 자바에이전트가 등록되어 있는 경우에 적용된다.
3) 관례를 따르는 클래스 로더
- 1), 2)의 방식이 적용 불가능한 경우에 적용된다.
- 리플렉션을 이용해서 클래스 로더에 로드타임 위버 기능을 추가할 수 있는 메소드가 있는지 확인한다. 예를 들어, addTransformer() 이름을 가진 메소드를 제공하는 클래스 로더에 로드타임 위버 기능을 적용할 수 있도록 하는 관례가 있다.
- 클래스 로더를 적용하는 방법은 서버와 버전마다 다르기 때문에 매뉴얼을 참고해야 한다.
▣ 특정 방식의 로드타임 위버를 지정하고 싶다면 <context:load-time-weaver />의 weaver-class 속성을 이용하면 된다.
3. @EnableLoadTimeWeaving
- Spring 3.1에서 추가된 어노테이션이다.
- Xml 설정의 <context:load-time-weaver />과 동일한 기능을 한다.
- 아래와 같이 설정 클래스에 추가해주면 된다.
@Configuration
@EnableLoadTimeWeaving
public class AppConfig {...}
- aspectjWeaving 엘리먼트를 통해 AspectJ를 이용한 로드타임 위빙을 적용할 수 있다.
+ 보충)
- 직접 구현한 로드타임 위버를 사용하고 싶다면 LoadTimeWeavingConfigurer를 이용하면 된다. (책 오타 부분 수정)
● 참고 자료 : 토비의 스프링 3.1 Vol.2
'Spring Series > Spring Framework' 카테고리의 다른 글
[Spring] DelegatingDataSource (0) | 2022.10.23 |
---|---|
[Spring] 테스트 컨텍스트 프레임워크 (0) | 2022.10.17 |
[Spring] AspectJ로 bean이 아닌 오브젝트에 DI 적용하기 (0) | 2022.10.13 |
[Spring] AOP 포인트컷 표현식 (0) | 2022.10.12 |
[Spring] 자바 코드를 이용한 MVC 전략 설정 (0) | 2022.10.06 |
댓글