Spring/Spring 이야기
스프링 핵심 원리 기본편 강의 - Bean scope & Bean lifecycle
seungdols
2024. 3. 26. 07:52
빈 스코프
스프링 빈은 스프링 컨테이너의 시작과 함께 생성 되어서 스프링 컨테이너가 종료될 때까지 유지 되는데, 이는 기본적으로 싱글톤 스코프로 생성 되기 때문이다.
다양한 스코프 지원
- 싱글톤
- 프로토 타입
- 스프링 컨테이너는 프로토 타입 빈의 생성과 의존관계 주입까지만 관여 하고 그 후는 관리 하지 않음. (매우 짧음)
- 웹 관련 스코프
- request
- 웹 요청이 한번 들어왔다 나갈때까지 유지
- session
- 웹 세션이 생성되고 종료될 때까지 유지
- application
- 웹 서블릿 컨텍스트와 같은 범위로 유지
- request
component scan 자동등록
@Scope("prototype")
@Component
public class HelloBean {}
수동 등록
@Scope("prototype")
@Bean
PrototypeBean HelloBean() {
return enw HelloBean();
}
빈 생명주기 콜백
데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요하다.
생명주기
스프링 빈 생명주기
- 객체 생성
- 의존관계 주입
스프링 빈의 이벤트 생명주기
- 스프링 컨테이너 생성
- 스프링 빈 생성
- 의존관계 주입
- 초기화 콜백
- 사용
- 소멸전 콜백
- 스프링 종료
스프링이 지원 하는 빈 생명주기 콜백 3가지
- interface
InitializingBean
,DisposableBean
- 설정 정보
@PostConstruct
,@PreDestroy
InitializingBean
, DisposableBean
해당 방식은 오래전에 나온 방식이라 현재는 잘 사용하지 않는다.
단점
- 스프링 전용 인터페이스에 의존하게 된다.
- 초기화/소멸 메서드의 이름을 바꿀 수 없다.
- 외부 라이브러리에서 사용할 수 없음
빈 설정정보
@Bean(initMethod = "init", destroyMethod = "close")
- 빈 등록시에 초기화/소멸 메서드를 지정할 수 있다.
- 스프링 빈이 스프링 코드에 의존적이지 않는다.
- 설정 정보를 사용하기 때문에 외부 라이브러리에도 설정 할 수 있다.
종료 메서드 추론
destroyMethod
는 특수 기능이 있다.- 라이브러리는 보통 종료 메서드의 이름을
close
,shutdown
로 사용 한다.- 해당 이름들은 기본적으로 자동으로 추론 해서 동작 시켜준다.
- 추론을 쓰지 않으려면,
destroyMethod = ""
으로 설정 하면 된다.
@PostConstruct, @PreDestroy
- 최신 권장 방법의 하나
- JSR-250 이라는 자바 표준안이다. 다른 컨테이너에서도 동작 한다.
- 유일한 단점은 외부 라이브러리에 적용할 수 없다.
- why? 코드를 수정 해야 됨..
반응형