Spring Bean

업데이트:

Bean

  • Spring IOC Container가 관리하는 자바 객체이다.

Bean 등록 방식

Component Scan

특정 클래스들을 Bean으로 등록하기 위해 사용되는 방법이다.

basePackage

지정된 패키지를 포함한 그 이하 패키지의 클래스들을 대상으로 @Component Annotation 혹은 연관 Annotation(@Controller, @Service, …)이 선언되어 있으면 해당 Component를 Scan한다.

basePackageClasses

주어진 클래스의 위치에 해당하는 패키지를 포함한 그 이하 패키지의 클래스들을 대상으로 @Component Annotation 혹은 연관 Annotation(@Controller, @Service, …)이 선언되어 있으면 해당 Component를 Scan한다.

useDefaultFilters

@Component Annotation 혹은 연관 Annotation(@Controller, @Service, …)이 선언되어 있는 클래스를 포함하는지를 결정하기 위해서 사용된다. (Default : true)

FilterType.ANNOTATION

classes에 추가한 Annotation이 선언되어 있는 클래스를 Scan한다.

FilterType.ASPECTJ

AspectJ의 pattern을 사용하여 Scan한다.

FilterType.ASSIGNABLE_TYPE

classes에 추가한 클래스와 해당 클래스의 상속 및 구현체에 해당하는 Scan한다.

FilterType.REGEX

pattern으로 정의한 정규표현식을 이용하여 Scan한다.

FilterType.CUSTOM

사용자 정의된 Filter를 이용하여 Scan한다.

public class CustomFilter implements TypeFilter {
  @Override
  public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory){
    ...
  }
}

includeFilters

위에 설명된 Filter를 사용하여 Component Scan에 포함한다.

excludeFilters

위에 설명된 Filter를 사용하여 Component Scan에 제외한다. 단, includeFilters와 중복될 경우 exculudeFilters가 우선순위가 높아서 제외가 된다.

lazyInit

ComponentScan된 Class들이 실제 사용할 때, 초기화 된다.

Scope1

Singleton (Default)

하나의 Bean 정의에 대해서 Spring IOC Container 내에 단 하나의 객체만 존재한다.

Prototype

하나의 Bean 정의에 대해서 다수의 객체가 존재할 수 있다.

Request

하나의 Bean 정의에 대해서 하나의 HTTP request의 생명주기 안에 단 하나의 객체만 존재한다.

Session

하나의 Bean 정의에 대해서 하나의 HTTP Session의 생명주기 안에 단 하나의 객체만 존재한다.

Global session

하나의 Bean 정의에 대해서 하나의 global HTTP Session의 생명주기 안에 단 하나의 객체만 존재한다. 일반적으로 portlet context 안에서 유효하다.

Life Cycle

Bean은 객체 생성 > 초기화 > 사용 > 소멸의 Life Cycle을 가진다.

초기화 및 소멸의 3가지 방법

  • @PostConstruct, @PreConstruct 어노테이션을 활용한다.
  • InitializingBean, DisposableBean 인터페이스를 구현하여 사용한다.
  • 빈 등록 시, init-method 혹은 destroy-method를 등록한다.

Reference

댓글남기기