스프링 컨테이너, 빈

1763 단어 SpringSpring

스프링 컨테이너?

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

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

빈(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

좋은 웹페이지 즐겨찾기