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를 등록한다.
댓글남기기