Java Spring을 사용할 경우 Bean 을 Spring 위에 Singleton 으로 올리는것에 대해서는 이전 포스팅에서 다룬적이 있다.
Singleton 에 대해서는 아래 참고 포스팅을 참고 바란다.
이번 포스팅에서 다룰 내용인 prototype이란.
singleton은 여러번 호출이 되어도 하나의 주소를 반환한다고 한다면
이 prototype이란 요청시마다 객체가 생성이 되는 개념이라고 보면 된다.
그렇기에 당연히 무분별하게 사용하면 안되고 그럴경우엔 OutofMemory 등의 에러가 발생할수 있다.
허나 실제로 실무를 경험하다보면 거의 없지만 간혹 이 prototype을 사용해줘야하는 경우가 있을때도 있다.
그럴 경우에 대비하여 샘플 코드를 아래 작성 해둔다.
bean을 생성할때 annotation으로
@Scope("prototype")
이라고 설정을 하게 되면 bean 설정은 끝이 난다.
저번 포스팅에서 singleton 테스트를 그대로 가져와서 이어서 테스트 해볼것이다.
=====포스팅에서 가져옴=====
Service안에
private int cnt=0; public int getCnt() { return this.cnt; } public int addCnt() { cnt= this.cnt+1; return cnt; } |
이라는 코드를 추가 후
다시 TestController 에서
System.out.println(service.getCnt()); service.addCnt(); System.out.println(service2.getCnt()); |
를 할 경우 출력은
0, 1 이 순서대로 나온다.
=====포스팅에서 가져옴=====
여기서 Service 에 @Component 등 Bean 등록 annotation과 함께
@Scope("prototype") 을 사용해주면 어떻게 될까?
결론은 0,0 이 나온다.
각각 호출할때 별개로 가져오게 된다.
이렇게 prototype을 사용하면 singleton에서는 한개로만 관리가 되었지만 각각 관리가 되고,
주체는 호출한 클라이언트가 객체를 관리하게 된다.
빈번하게 사용이 된다면 부하가 가니 방어 코딩을 추천한다.
참고 포스팅
https://thenicesj.tistory.com/146
https://thenicesj.tistory.com/640
'IT > Java' 카테고리의 다른 글
배열의 부분복사(arraycopy, copyOfRange) (23.07.31) (10) | 2023.08.01 |
---|---|
Spring DL 이란?(Dependency Lookup) (69) | 2023.07.30 |
Spring 에서 Singleton (51) | 2023.07.28 |
Queue (LinkedList) 사용법 (63) | 2023.07.26 |
Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean that should be consumed (82) | 2023.07.23 |
댓글