빈 라이프사이클

binary_j·2022년 1월 30일
0
post-custom-banner

컨테이너 초기화/종료


초기화

AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(AppContext.class);

사용

Member m = ctx.getBean("member", Member.class);
m.printName();

종료

ctx.close();

Bean 객체의 라이프사이클


객체 생성 -> 의존 설정 -> 초기화 -> 소멸

Bean 객체의 생성과 소멸을 담당하는 인터페이스

org.springframework.beans.factory.InitializingBean
org.springframework.beans.factory.DisposableBean

public interface InitializingBean() {
	void afterPropertiesSet() throws Exception;
}

public interface DisposableBean() {
	void destroy() throws Exception;
}

수정이 필요하면 상속받고 구현해서 사용할 수 있음

커스텀 메서드 initMethod, destroyMethod


InitializingBean, DisposableBean 인터페이스를 직접 구현할 수 없는 경우 스프링에서 메서드를 지정해 줄 수 있다.

@Bean(initMethod = "foo", destroyMethod = "bar")

Cf) 커스텀 메서드를 사용할 때는 초기화가 두 번 되지 않도록 주의
Cf2) 커스텀 메서드는 파라미터를 가져서는 안됨

프로토타입 범위


기본적으로 스프링은 싱글톤 범위를 갖는다(하나의 Bean 객체만 존재).
그러나 프로토타입 범위라는 것도 존재한다.
프로토타입 범위를 갖도록 설정하면 매번 새로운 객체가 생성된다.

프로토타입 범위를 가지게 하려면

@Bean
@Scope("prototype")

이처럼 @Scope 어노테이션을 붙이면 된다.
프로토타입 Bean은 자동으로 소멸 처리가 되지 않기 때문에, 사용자가 직접 소멸 처리를 해주어야 한다.

post-custom-banner

0개의 댓글