티스토리 뷰
반응형
다이나믹 프록시
- 런타임에 인터페이스 또는 클래스의 프록시 인스턴스 또는 클래스를 만들어 사용하는 프로그래밍 기법이다.
다이나믹 프록시 사용처
- 스프링 데이터 JPA
- 스프링 AOP
- Mockito
- 하이버네이트 lazy initialzation
- ...
Mockito
//MyRepository
public interface MyRepository extends JpaRepository<Book, Integer> {
}
//MyService
public class MyService {
MyRepository myRepository;
public MyService(MyRepository myRepository) {
this.myRepository = myRepository;
}
public void rent(Book book) {
Book save = myRepository.save(book);
System.out.println(save.getTitle());
}
public void returnBook(Book book) {
myRepository.save(book);
}
}
//MyServiceTest
public class MyServiceTest {
@Test
public void my1() throws Exception{
//1.
MyRepository myRepositoryMock = mock(MyRepository.class);
//2.
MyService myService = new MyService(myRepositoryMock);
Book book = new Book();
book.setTitle("spring");
myService.rent(book);
myService.returnBook(book);
}
//실행 결과 : spring
@Test
public void my2() throws Exception{
MyRepository myRepositoryMock = mock(MyRepository.class);
Book hibernateBook = new Book();
hibernateBook.setTitle("hibernate");
//3.
when(myRepositoryMock.save(any())).thenReturn(hibernateBook);
MyService myService = new MyService(myRepositoryMock);
Book book = new Book();
book.setTitle("spring");
myService.rent(book);
myService.returnBook(book);
}
//실행 결과 : hibernate
}
- MyRepository의 프록시(myRepositoryMock)를 Mockito를 통해 만들어낸다.
- MyService는 myRepositoryMock라는 프록시에 의해서 리얼 서브젝트의 save()를 호출한다.
- 프록시에 의해 접근한 리얼 서브젝트의 save() 리턴 결과에 상관없이 Mockito를 사용하여 사용 객체(hibernateBook)를 정해준다.
반응형
'Java > Java 기초' 카테고리의 다른 글
[Java 기초] Java의 Collection (0) | 2020.04.08 |
---|---|
[Java 기초] Error와 Exception (0) | 2020.03.30 |
[Java 기초] 클래스의 프록시 (0) | 2020.03.30 |
[Java 기초] static과 final의 조합 (2) | 2020.03.19 |
[Java 기초] 데몬 스레드 (0) | 2020.02.21 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 자바8
- 팩토리 메소드 패턴
- springboot
- ifPresent
- try catch finally
- mustache
- try with resources
- jdk버전
- 빌더 패턴
- 정적팩터리메서드
- 연관관계
- 인프런
- JPA
- 빈 순환 참조
- java
- java8
- 점층적 생성 패턴
- 김영한
- 스프링부트
- @Lazy
- effectivejava
- 복사 팩토리
- Spring
- junit
- Effective Java
- flatMap
- 이펙티브자바
- 이펙티브 자바
- 생성자
- package-private
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함