스프링 컨테이너, 빈

어겐어갠·2022년 4월 4일
0

스프링 컨테이너?

자바 객체의 생명주기를 관리한다.

스프링 컨테이너에서 자바 객체를 관리함으로서 각각의 객체들은 생명과 소멸 객체간의 연결에 대한 책임에서 벗어나게 된다.

빈(Bean)?

스프링 컨테이너에서 관리되는 자바 객체

스프링 컨테이너의 종류

  • BeanFactory
    빈의 등록, 생성, 조회 등의 역할을 한다.
    getBean() 으로 빈을 인스턴스화 시킬 수 있다.
  • ApplicationContext
    ApplicationContext도 BeanFactory처럼 빈을 관리할 수 있다.

차이점?

ApplicationContext는 BeanFactory의 빈 관리 기능을 상속받았다.
그 외에도 이미지 파일 자원, 국제화 텍스트 관리 등의 기능이 있으므로 ApplicationContext를 사용하자.

사용 방법

빈을 관리할 객체(보통 AppConfig)에 @Configuration을 사용하여 역할을 명시한 후 @Bean을 메소드에 붙여 빈 등록을 한다.

사실 스테레오타입 애노테이션을 이용하면 이 코드양을 상당수 줄일 수 있다.
스테레오타입(고정관념)이란 특정 요소를 도메인에 맞게 분류하는 것.
@Component, @Controller, @Service, @Configuration, @Repository 등이 있다.

만약 같은 구현체가 2개 이상이어서 스프링이 무엇을 주입해아할지 모른다면?

  • @Primary 사용
    이 애노테이션을 사용하면 주입 우선순위가 높아진다.
  • @Qualifier 사용
    Qualifier을 통해 객체가 사용되는 상황을 명시하고, 추상체가 사용될 때 이를 명시하게되면 상황에 맞는 의존관계가 주입된다.
  • @ComponentScan을 통한 패키지 범위제한 or 예외처리
    ComponentScan의 basePakages 혹은 basePackageClasses를 통해 빈 탐색범위를 제한할 수 있다.
    혹은 includeFilters, excludeFilters를 사용하여 특정 조건을 만족하는 클래스를 스캔 혹은 제외시킬 수 있다.

Bean Scope

총 6개의 빈 스콥이 있으며 기본적으로 싱글톤이다.

@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)

Bean 생명주기 콜백

  • 생성
  1. @PostConstruct
  2. InitializingBean(Interface)
  3. @Bean의 initMethod
  • 소멸
  1. @PreDestroy
  2. DisposableBean(interface)
  3. @Bean의 destroyMethod
profile
음그래

0개의 댓글