[Spring] Bean

정리


Bean

  • Spring Framework에서 관리하는 오브젝트, 즉 하나의 독립적인 단위로서의 객체

Bean의 생명주기

  • 인터페이스 구현
    • InitaializingBean은 초기화를, DisposableBean은 소멸을 담당하는 인터페이스
public interface InitializingBean{
      void afterPropertiesSet() throws Exception;
}

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

public class SimpleClass implements InitializingBean, DisposableBean{
    @Override
    public void afterPropertiesSet() throws Exception{
        // Bean 생성 및 초기화를 담당한다.
    }
    @Override
    public void destroy() throws Exception{
        // Bean 소멸을 담당한다.
    }
}
  • 메서드 지정
    • XML설정 파일에서 bean을 정의할 때 생성 및 소멸을 소유권을 통해 지정할 수도 있다.
<bean id="simpleBean" class="com.spring.bean.BSimpleClass" init-method="init" destroy-method="destroy" />

@Bean(initMethod = "init", destroyMethod = "destroy")
public ConnPool3 connPool3(){
    return new ConnPool3();
}
  • 어노테이션의 사용
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

public class SimpleClass{

    @PostConstruct
    public void init(){
        // Bean 생성 및 초기화
    }

    @PreDestroy
    public void destroy(){
        // Bean 소멸
    }
}

Bean Scope

Scope 정의
singleton 스프링 IoC 컨테이너 당 하나의 객체 인스턴스에 하나의 빈을 정의한 스코프
prototype 필요한 매 순간 새로운 bean 객체가 생성
request 한 HTTP 요청의 생명주기에 하나의 빈을 정의한 스코프
session 한 HTTP 세션의 생명주기에 하나의 빈을 정의한 스코프
global session 한 글로벌 HTTP 세션의 생명주기에 하나의 빈을 정의한 스코프
  • socope가 prototype의 경우 destroy 이벤트 처리가 불가능

java singleton 패턴과 spring singleton 차이

  • java singleton
    • 특정 클래스에 대해서 ClassLoader 마다 유일한 인스턴스가 생성
  • spring singleton
    • 스프링 컨테이너는 빈 정의의 클래스에 대한 유일한 인스턴스를 생성
      • bean id에 대해서 유일한 인스턴스 보장 - 같은 클래스라도 id가 다르면 새로 생성

참고