스코프 : 이 빈이 존재 할 수 있는 범위 ( 언제부터 언제까지 )
최대 스코프 : 스프링 컨테이너의 시작~끝 ( 싱글톤 )
싱글톤 빈은 스프링이 자기 시작부터 끝까지 관리
프로토타입 빈은 스프링이 빈을 만들고, 의존관계 주입해주고, 초기화메서드까지 불러줌.
이게 끝임. ( 클라이언트에게 반환 해주고 스프링컨테이너는 관리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 호출 안됨. ( 이름 그대로 프로토타입. 만들고 버림 ㅋㅋ )
만약 포로토타입 빈을 닫아야 한다면 클라이언트가 닫아야함.
이렇게 직접 빈마다 닫아야함.
하지만 보통은 싱글톤 빈을 사용하는데 어쩌다 한번 포로토타입 빈을 사용하는데 이 때 동시에 사용하게 될 때 문제가 발생한다. -> 다음 장.
'Java, Spring > 스프링 핵심 원리 기본' 카테고리의 다른 글
9-4. 프로토타입 스코프 - 싱글톤 빈과 함께 사용시 Provider로 문제 해결 (0) | 2022.08.08 |
---|---|
9-3. 프로토타입 스코프 - 싱글톤 빈과 함께 사용시 문제점 ~ (0) | 2022.08.08 |
8-2. ~ 8-4. 생명주기 콜백 3가지 방법 (0) | 2022.08.08 |
8-1. 빈 생명주기 콜백 시작 (0) | 2022.08.08 |
7-7. 어노테이션 직접 만들기 ~ 7-9. 자동vs수동등록 (0) | 2022.08.07 |