빈 스코프와 생명주기 질문

Haechan Kim·2023년 1월 13일
0

Spring

목록 보기
25/68
  • 빈 스코프 중에서 가장 넓은 범위를 가진 스코프는 무엇인가요?

기본 스코프인 싱글톤 스코프.
스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프

  • 싱글톤으로 적합한 객체의 특징은 무엇인가요?

상태가 없는 공유 객체, 읽기 전용 상태 가진 객체

  • 싱글톤으로 적합하지 않은 객체의 특징은 무엇인가요?
    사용할 때마다 상태 달라져야 하는 객체,
    쓰기 가능한 상태 있는 객체,
    매번 사용할 때 마다 의존관계 주입 완료된 새로운 객체 필요할 때,
    웹과 같이 여러명이 같은 객체 사용할 때

  • 빈 스코프의 종류에 대해 두 가지 이상 말해보세요.

  1. 싱글톤 : 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프
  2. 프로토타입 : 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프. 이후는 해당 빈 호출한 사용자에 의해 종료.
  3. 웹 관련 스코프 : request, session, application
  • 프로토타입 빈은 어떤 방식에 의해 제거되나요?

컨테이너가 관리하는 것이 아니라 호출한 사용자에 의해 종료

  • 빈 생명주기를 순서대로 말해보세요.
  1. 스프링 컨테이너 생성
  2. 스프링 빈 생성
  3. 의존관계 주입
  4. 초기화 콜백
  5. 사용
  6. 소멸 전 콜백
  7. 스프링 종료
  • @PostConstruct와 @PreDestroy은 각각 언제 호출되나요?

PostConstruct : 초기화 콜백. 의존관계 주입 끝나면 호출 됨.
PreDestroy : 소멸 전 콜백. 종료 전.

  • @PostConstruct, @PreDestroy 어노테이션을 사용하는 방법 말고도 초기화 콜백과 소멸 전 콜백을 사용할 수 있는 방법에 대해 아는대로 말해보세요. (https://dev-coco.tistory.com/170)
  1. 인터페이스 : InitializingBean 초기화, DisposableBean 소멸
  2. 설정 정보에 초기화, 종료 메소드 지정
  • @PostConstruct와 @PreDestroy 어노테이션의 단점 하나를 말해보세요. 그리고 가능하다면 그 단점을 커버하기 위해 뭘 사용할 수 있는지도 말해볼 수 있으면 좋겠습니다. (https://dev-coco.tistory.com/170)

커스터마이징 불가능한 외부 라이브러리 적용이 불가능하다.
bean의 initmethod와 destroymethod 속성 사용하자

  • 초기화 작업이 유용하게 쓰일 수 있는 간단한 예를 하나 들어보세요.
  • 종료 작업이 유용하게 쓰일 수 있는 간단한 예를 하나 들어보세요.

================

  • 의존관계 주입 방식 -> 생성자 주입 방식과 필드/세터 주입 방식의 라이프 사이클 차이
    (https://dev-coco.tistory.com/170)
    생성자 주입은 객체 생성과 의존관계 주입 동시에 일어남
    필드/세터 주입은 나눠져 있음. 그래서 nullpointerexception

생명주기 콜백 방법 3가지 (https://dev-coco.tistory.com/170)
1. 인터페이스 방법
InitializingBean, DisposableBean
단점 : 스프링 전용 인터페이스. 코드가 인터테이스에 의존, 초기화/소멸 메소드 오버라이드 하기 때문에 메소드 명 변경 x, 코드 커스터마이징 할 수 없는 외부 라이브러리에 적용 불가
초창기에 나온 방법, 지금은 거의 사용 x

  1. 설정 정보에서 초기화, 종료 메소드 지정
    메소드명 자유롭게, 스프링 코드에 의존 x, 외부 라이브러리 적용 가능
    단점 : 빈 지정 시 initMethod, destroy 메서드 직접 지정해야 하기에 번거롭다.

  2. @PostConstruct, @PreDestory 어노테이션
    최신 스프링에서 가장 권장 방법, 편리, 스프링 종속 기술이 아닌 자바 표중이라서 다른 컨테이너에서도 동작.
    단점 : 외부 라이브러리에서 적용 불가능.

0개의 댓글