공부/Spring

CGLIB

kkkkkdddddhhhhh 2024. 1. 11. 18:38

CGLIB:

  • 바이트 코드를 조작해 동적으로 클래스를 생성해주는 라이브러리
  • 인터페이스 없이 구체 클래스만 존재해도 프록시를 만들어 낼 수 있다.
  • 외부 라이브러리지만, Spring FrameWork 내부 소스코드에 포함되어있음, 별도 추가 X

 

MethodInteceptor 를 제공한다.

 

package org.springframework.cglib.proxy;

  public interface MethodInterceptor extends Callback {
     
     Object intercept(
     Object obj, 
     Method method,
     Object[] args, 
     MethodProxy proxy) throws Throwable;
 
 }

 

obj : CGLIB이 적용된 객체

method: 호출된 메서드

args: 메서드를 호출하면서 전달된 인수

proxy: 메서드 호출에 사용

 

직접 학습 테스트로 배워보자.

 

MethodInteceptor를 구현한 Decorator 클래스를 만들어준다.

 

 

Enhancer를 이용해 Proxy를 진행할 실 객체 클래스와 프록시 클래스의 요청이 들어왔을때 decorating을 해줄 Decorator를 지정해준다.

 

 

 

 

enhancer를 통해 프록시가 된 객체는 

" 대상클래스이름$$EhancerByCGILB$$메모리주소 "

로 클래스 이름이 생성된다.

 

 

 

 

"CGLIB 제약"

클래스 기반 프록시는 상속을 사용하기에 제약이 존재함.

  1. 부모 클래스의 생성자를 체크해야한다. -> 기본생성자가 필요함.
  2. 클래스에 final 키워드가 붙으면 상속이 불가능하다. 
  3. 메서드에 final 키워드가 붙으면 메서드 오버라이딩이 불가능해진다. 

'공부 > Spring' 카테고리의 다른 글

AOP  (0) 2024.01.14
빈 후처리기  (0) 2024.01.13
포인트컷, 어드바이스, 어드바이저  (0) 2024.01.12