Spring/Spring 이야기

스프링 핵심 원리 기본편 강의 - Bean scope & Bean lifecycle

seungdols 2024. 3. 26. 07:52

빈 스코프

스프링 빈은 스프링 컨테이너의 시작과 함께 생성 되어서 스프링 컨테이너가 종료될 때까지 유지 되는데, 이는 기본적으로 싱글톤 스코프로 생성 되기 때문이다.

다양한 스코프 지원

  • 싱글톤
  • 프로토 타입
    • 스프링 컨테이너는 프로토 타입 빈의 생성과 의존관계 주입까지만 관여 하고 그 후는 관리 하지 않음. (매우 짧음)
  • 웹 관련 스코프
    • request
      • 웹 요청이 한번 들어왔다 나갈때까지 유지
    • session
      • 웹 세션이 생성되고 종료될 때까지 유지
    • application
      • 웹 서블릿 컨텍스트와 같은 범위로 유지

component scan 자동등록

@Scope("prototype")
@Component
public class HelloBean {}

수동 등록

@Scope("prototype")
@Bean
PrototypeBean HelloBean() {
  return enw HelloBean(); 
}

빈 생명주기 콜백

데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요하다.

생명주기

스프링 빈 생명주기

  1. 객체 생성
  2. 의존관계 주입

스프링 빈의 이벤트 생명주기

  1. 스프링 컨테이너 생성
  2. 스프링 빈 생성
  3. 의존관계 주입
  4. 초기화 콜백
  5. 사용
  6. 소멸전 콜백
  7. 스프링 종료

스프링이 지원 하는 빈 생명주기 콜백 3가지

  • interface
    • InitializingBean, DisposableBean
  • 설정 정보
  • @PostConstruct, @PreDestroy

InitializingBean, DisposableBean

해당 방식은 오래전에 나온 방식이라 현재는 잘 사용하지 않는다.

단점

  • 스프링 전용 인터페이스에 의존하게 된다.
  • 초기화/소멸 메서드의 이름을 바꿀 수 없다.
  • 외부 라이브러리에서 사용할 수 없음

빈 설정정보

@Bean(initMethod = "init", destroyMethod = "close")

  • 빈 등록시에 초기화/소멸 메서드를 지정할 수 있다.
  • 스프링 빈이 스프링 코드에 의존적이지 않는다.
  • 설정 정보를 사용하기 때문에 외부 라이브러리에도 설정 할 수 있다.

종료 메서드 추론

  • destroyMethod는 특수 기능이 있다.
  • 라이브러리는 보통 종료 메서드의 이름을 close, shutdown로 사용 한다.
    • 해당 이름들은 기본적으로 자동으로 추론 해서 동작 시켜준다.
  • 추론을 쓰지 않으려면, destroyMethod = ""으로 설정 하면 된다.

@PostConstruct, @PreDestroy

  • 최신 권장 방법의 하나
  • JSR-250 이라는 자바 표준안이다. 다른 컨테이너에서도 동작 한다.
  • 유일한 단점은 외부 라이브러리에 적용할 수 없다.
    • why? 코드를 수정 해야 됨..
반응형