런타임에 특정 인터페이스 또는 클래스의 프록시 인스턴스 또는 클래스를 만들어 사용하는 프로그래밍 기법
주요 사용처
- 스프링 데이터 JPA
- 스프링 AOP
- Mockito
- hibernate lazy initalzation
- .사용하지 않는 entity는 임시 프록시 객체 만들어놓고, 나중에 실제로 필요할 때 해당 엔티티 가져오는 것
Mockito
특정 클래스를 테스트 할 때, 해당 클래스를 구성하는 멤버 인스턴스 변수를 초기화해주기 어려울 경우, 대체를 위한 다이나믹 프록시 기술을 활용하여 프록시 객체를 생성하는 기능을 지원함.
하지만 아래 예시에서
when(bookRepositoryMock.save(any())).thenReturn(aBook);
항상 "A" Book을 return 하는 .Mock bookRepository를 만들어서 bookService에 주입했기 때문에,
bookService.rent(book) 에서 "B" book을 전달하였음에도, A가 찍히게 된다
'스프링 관련 > 스프링 프레임워크' 카테고리의 다른 글
서블릿, 서블릿 컨테이너, 멀티쓰레드, 톰캣 정리 (0) | 2023.04.02 |
---|---|
스프링 부트 핵심 기능 5가지 (0) | 2023.03.11 |
@RestControllerAdvice, @ExceptionHandler(RuntimeException.class) 이용한 예외처리 분리 (0) | 2022.11.20 |
@Transactional 동작 원리 간략 설명 (0) | 2022.09.13 |
API 만들 때 생길 수 있는 문제 (컬렉션 조회 최적화) (0) | 2022.08.28 |
댓글