본문 바로가기

SpringFramework Core - I. IoC 컨테이너/6. Bean 커스터마이징하기

(10)
1.6.3. 다른 Aware 인터페이스들 ApplicationContextAware과 BeanNameAware와 더불어, 스프링은 bean들이 컨테이너를 가리킬 수 있도록 하는 넓은 범위의 Aware 콜백 인터페이스를 제공한다. 일반적인 규칙으로써, 이름은 의존성 타입을 가리킨다. 다음 표는 가장 중요한 Aware 인터페이스들을 요약한다. 이름 주입된 의존성 다음에서 설명... ApplicationContextAware ApplicationContext ApplicationContextAware과 BeanNameAware ApplicationEventPublisherAware ApplicationContext를 감싸고 있는 이벤트 publisher ApplicationContext의 추가 기능들 BeanClassLoaderAware 클래스로더가..
1.6.2. ApplicationContextAware과 BeanNameAware ApplicationContext가 org.springframework.context.ApplicationContextAware 인터페이스를 구현한 객체의 인스턴스를 만들면, 그 인스턴스는 ApplicationContext를 참조로써 제공받는다. 다음 예시는 ApplicationContextAware 인터페이스의 정의를 보여준다. public interface ApplicationContextAware { void setApplicationContext(ApplicationContext applicationContext) throws BeansException; } 그래서 bean들은 프로그램적으로 그들 스스로를 만들어낸 ApplicationContext를 조작할 수 있게 된다. ApplicationCo..
1.6.1.6. 웹 앱이 아닐 때 스프링 IoC 컨테이너를 Gracefully하게 Shutting Down 하기 이 부분은 웹앱이 아닌 곳에서만 적용된다. 스프링의 웹 기반 ApplicationContext 구현체는 이미 관련된 웹앱이 shut down할 때 스프링 IoC 컨테이너를 gracefully하게 shut down시키는 코드를 가지고 있다. 만약 웹앱 환경이 아닌 곳에서 스프링의 IoC 컨테이너를 사용하고 있다면(예를 들어, rich client 데스크탑 환경) shutdown hook을 JVM에 등록하라. 그렇게 하면 graceful한 shutdown을 보장하며 싱글턴 bean들을 소멸시키는 관련 메소드를 호출하여 모든 리소스를 release하게 해줄 것이다. 여전히 이러한 소멸 콜백들은 정확하게 설정하고 실행해야만 한다. shutdown hook을 등록하기 위해서는, ConfigurableApplica..
1.6.1.5. Startup과 Shutdown 콜백 Lifecycle 인터페이스는 스스로의 라이프사이클 요구사항을 가진 객체들을 위한 본질적인 메소드를 정의한다 (몇몇 백그라운드 프로세스를 시작시키고 정지시키는 등). public interface Lifecycle { void start(); void stop(); boolean isRunning(); } 스프링의 관리를 받는 모든 객체는 Lifecycle 인터페이스를 구현하고 있을 것이다. ApplicationContext가 시작과 정지 신호를 받으면 해당 context 내에 정의된 모든 Lifecycle 구현체에 그 신호를 전달한다. 다음에서 보여주는 LifecycleProcessor에게 위임함으로써 그 일을 해낸다. public interface LifecycleProcessor extends Li..
6.1.4. 라이프사이클 메커니즘들 결합시키기 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-lifecycle-combined-effects 스프링 2.5에서는 bean의 라이프사이클 행동을 제어하기 위한 세 가지 옵션이 있다. InitializingBean과 DisposableBean 콜백 인터페이스 커스텀한 init()과 destroy() 메소드 @PostConstruct와 @PreDestroy 어노테이션. 이 메커니즘들을 주어진 bean을 컨트롤하기 위해 결합시킬 수 있다. ※ 만약 여러 라이프사이클 메커니즘이 설정되어 있고 각각의 메커니즘이 서로 다른 이름으로 설정되어 있다면, 각각의 설정된 메소드..
6.1.3. 기본적인 초기화/소멸 메소드들 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-lifecycle-default-init-destroy-methods 스프링에 특화된 InitializingBean과 DisposableBean 콜백 인터페이스를 사용하지 않고 초기화/소멸 메소드 콜백을 만들 때는 init(), initialize(), dispose() 등과 같은 이름의 메소드들을 작성하게 될 것이다. 이상적으로는, 그런 라이프사이클 메소드들의 이름이 프로젝트 전반에 걸쳐 규범화되어 다른 개발자들로 하여금 같은 메소드 이름을 사용하게하여 일관성을 지켜야한다. 스프링 컨테이너가 모든 bean에서 초..
6.1.2. 소멸 콜백 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-lifecycle-disposablebean org.springframework.beans.factory.DisposableBean 인터페이스를 구현하면 컨테이너가 소멸될 때 bean이 콜백을 받을 수 있다. DisposableBean 인터페이스는 하나의 메소드를 가진다. void destroy() throws Exception; 우리는 DisposableBean 콜백 인터페이스를 사용하지 않는 것을 권장한다. 스프링의 코드와 불필요한 결합을 맺게 되기 때문이다. 대신에, @PreDestroy 어노테이션이나 bea..
6.1.1. 초기화 콜백 원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-lifecycle-initializingbean org.springframework.beans.factory.InitializingBean 인터페이스는, 컨테이너로부터 필요한 프로퍼티들을 bean에 모두 세팅받은 후에 초기화 작업을 수행할 수 있도록 해준다. InitializingBean 인터페이스는 하나의 메소드를 가진다. void afterPropertiesSet() throws Exception; 우리는 InitializingBean 인터페이스를 사용하지 않는 것을 권장한다. 스프링과 불필요한 결합을 맺게되기..