본문 바로가기

개발&컴퓨터/개발강좌

스프링 프레임워크 기본 강좌 (10) - 빈 후처리기(Bean Post Processor)

반응형

* 빈 후처리기(Bean Post Processor)란?

 

 - 빈(Bean)의 설정을 후처리(postprocessing)함으로써 빈의 생명 주기와 빈 팩토리의 생명주기에 관여.
 - 빈의 초기화 되기 전, 초기화 된 후 2개의 기회를 제공.
 - 빈 프로퍼티의 유효성 검사 등에 사용.
 - 다른 초기화 메소드인 afterPropertiesSet()과 init-method가 호출되기 직전과 직후에 호출되어짐.

public interface BeanPostProcessor {

    Object postProcessBeforeInitialization(Object bean, String name) throws BeansException;

    Object postProcessAfterInitialization(Object bean, String name) trhows BeansException;

    ...

 

 

package com.sample;

public class Foo implements BeanPostProcessor {

    public void method1() {

        // 어떠한 작업..

    }

    Object postProcessBeforeInitialization(Object bean, String name) throws BeansException {

        // 초기화 되기 전 처리

    }

    Object postProcessAfterInitialization(Object bean, String name) throws BeansException; {

        // 초기화 된 후 처리

    }

 

Resource resource = new FileSystemResource("beans.xml");

BeanFactory factory = new XmlBeanFactory(resource);

BeanPostProcess foo = new Foo();

Factory.addBeanPostProcessor(fool);

 

 // beans.xml 개체

<bean id="foo" class="com.sample.Foo" />

 

Bean Factory를 IoC Container 로 사용하는 경우에는 단순히 addBeanPostProcessor() 메서드를 이용하여 프로그램 방식으로만 빈 후처리기(Bean Post Processor)를 등록함.

 

* 빈 후처리 과정 (Process of Bean Postprocessing)

 1) 빈 객체(Bean Instance) 생성 (생성자(Constructor) 또는 팩토리 메서드(Factory Method) 사용).

 2) 빈 프로퍼티(Bean Property)에 값과 빈 레퍼런스 설정.

 3) Aware Interface에 정의된 Setter 메서드 호출

 4) 빈 인스턴스(Bean Instance)를 각 빈 후처리기(Bean Post Processor)의 postProcessBeforeInitialization() 에 전달.

 5) 초기화 Callback 메서드 호출

 6) 빈 인스턴스(Bean Instance)를 각 빈 후처리기(Bean Post Processor)의 postProcessAfterInitialization() 에 전달.

 7) 빈 사용 준비 완료

 8) 컨테이너 종료 후, 소멸(Destructor) Callback 메서드 호출

 

[BeanFactory 인터페이스]

 - 빈 객체를 관리하고 각 빈 객체 간의 의존 관계를 설정해주는 기능 제공.

 - 가장 단순한 컨테이너.

[XmlBeanFactory 클래스]

 - 외부 자원으로부터 설정 정보를 읽어 와 빈 객체를 생성하는 클래스

 

덧붙여!

스프링의 빈 객체는 기본적으로 싱글톤(Singleton)으로 생성되는데, 그 이유는 사용자의 요청이 있을 때마다 애플리케이션 로직까지 모두 포함하고 있는 오브젝트를 매번 생성하는 것은 비효율 적이기 때문. 하나의 빈 객체(Bean Object)에 동시에 여러 스레드가 접근할 수 있기 때문에 상태 값을 인스턴스 변수에 저장해 두고 사용할 수 없음. 따라서 싱글톤의 필드에는 의존 관계에 있는 빈에 대한 참조(Reference)나 읽기 전용(Read-Only) 값만을 저장해 두고, 실제 오브젝트의 변화 상태를 저장하느 인스턴스 변수는 두지 않음. 애플리케이션 로직을 포함하고 있는 오브젝트는 대부분 싱글톤 빈(Singleton Bean)으로 만들면 충분함.

 

하지만, 하나의 빈 설정으로 여러 개의 오브젝트를 만들어서 사용하는 경우도 발생하게 되는데, 이 때는 싱글톤이 아닌 빈을 생성해야 함. 싱글톤이 아닌 빈은 프로토타입 빈(ProtoType Bean)과 스코프 빈(Scope Bean)이 있다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형