본문 바로가기

강의 내용 정리/스프링 핵심 원리 기본

9-1. 빈 스코프란? ~

스코프 : 이 빈이 존재 할 수 있는 범위 ( 언제부터 언제까지 )

최대 스코프 : 스프링 컨테이너의 시작~끝 ( 싱글톤 )

싱글톤 빈은 스프링이 자기 시작부터 끝까지 관리

 

프로토타입 빈은 스프링이 빈을 만들고, 의존관계 주입해주고, 초기화메서드까지 불러줌.

이게 끝임. ( 클라이언트에게 반환 해주고 스프링컨테이너는 관리X -> 그래서 종료메서드 X )

 

 

# 특별 스코프

1. request : 웹 요청이 들어오고 응답이 나갈 때까지 유지되는 스코프

이렇게 등록한다.~

 

 

 

 

--------------------------------------------------------- 9-2. 프로토타입 스코프

 

 

 

- 이름이 prototypeBean

- 클라이언트 요청이 들어오면 그 때 빈을 생성 ( DI 할거있으면 하고 ) , 초기화메서드호출 까지만 스프링이 처리

- ( 요청 시점에 생성!!!!!!!!!!!!!!!!! )

 

- 응답을 해주고 스프링컨테이너에서 버려버림.

- 요청이 오면 그 때마다 항상 새로운 빈을 만들어서 응답.

- 스프링은 빈생성, 의존관계주입, 초기화까지만 처리!!!!!!!!!!!!!!!

- 스프링은 빈생성, 의존관계주입, 초기화까지만 처리!!!!!!!!!!!!!!!

- 스프링은 빈생성, 의존관계주입, 초기화까지만 처리!!!!!!!!!!!!!!!

- 스프링은 빈생성, 의존관계주입, 초기화까지만 처리!!!!!!!!!!!!!!!

- 스프링은 빈생성, 의존관계주입, 초기화까지만 처리!!!!!!!!!!!!!!!

- 스프링은 빈생성, 의존관계주입, 초기화까지만 처리!!!!!!!!!!!!!!!

( 만약 종료메서드 호출해줘야하는 빈이라면 클라이언트가 책임지고 해줘야함. ) - @Predistroy 같은 종료메서드 호출X

 

초기화 = 초기화 메서드 호출 ( @PostConstruct )

 

 

 

 

1. Singleton

이 때의 파라미터인 SingletonBean.class 는 컴포넌트 클래스를 넣어주는 것.

파라미터로 넣어주면 SingletonBean 클래스가 bean으로 등록됨.

 

 

 

너무 쉬움 ㅋㅋ..

당연히 싱글톤 이지.. @Scope("singleton") 안해도 기본설정이 싱글톤.

 

isSameAs는 동일성비교로 연산자 == 와 동일하며 isEqualTo가 동등비교로 equals연산자와 동일하다.
간단히 말해 동일비교는 참조값 비교, 동등비교는 내용물(값) 비교

 

init 과 destory가 둘 다 호출된 것 확인.

 

 

2. Prototype

맨 밑줄에 스프링컨테이너 close가 호출되지만 @PreDestroy는 호출 안됨 - 스프링컨테이너에서 관리하는 객체가 아니라서 스프링컨테이너 닫을 때 미리 빈을 destroy 해 줄 필요가 없다.

 

 

 

1과 2가 서로 다르다. ( Prototype )

getBean 할 때 @PostConstruct 가 호출됨. ( 1. 빈생성, 2. 의존관계주입 후 3번째 단계 )

 

빈을 두 개 생성했을 때 @PostConstruct가 두 번 호출 된다. = 다른 객체가 각각 만들어진다. = 호출을 할 때 만든다.

그리고 @PreDestroy 호출 안됨. ( 이름 그대로 프로토타입. 만들고 버림 ㅋㅋ )

 

 

 

 

만약 포로토타입 빈을 닫아야 한다면 클라이언트가 닫아야함.

이렇게 직접 빈마다 닫아야함.

 

 

하지만 보통은 싱글톤 빈을 사용하는데 어쩌다 한번 포로토타입 빈을 사용하는데 이 때 동시에 사용하게 될 때 문제가 발생한다. -> 다음 장.

Recent Posts
Popular Posts
Recent Comments