Spring bean & Life Cycle에 대해서 설명하는 글입니다.
- Spring Container 는 자바 객체(Bean)의 생성과 소멸 같은 생명주기를 관리하며, 생성된 자바 객체들에게 추가적인 기능을 제공하는 역할을 합니다.
Bean Life cycle 이란 해당 객체가 언제 어떻게 생성되어 소멸되기 전까지 어떤 작업을 수행하고 언제, 어떻게 소멸되는지 일련의 과정을 이르는 말이다.
Spring Container는 이런 빈 객체의 생명주기를 컨테이너의 생명주기 내에서 관리하고, 생성이나 소멸 시 호출될 수 있는 콜백 메서드를 제공하고 있다.
1) 스프링 컨테이너 생성
2) 스프링 빈 생성
3) 의존성 주입
4) 초기화 콜백 : 빈이 생성되고, 빈의 의존관계 주입이 완료된 후 호출
5) 사용
6) 소멸전 콜백 :빈이 소멸되기 직전에 호출
7) 스프링 종료
public class Example1 implements InitialzingBean, DisposableBean {
```
@Override
public void afterPropertiestSet() throws Exception {
// 초기화 로직
}
@Override
public void destory() throws Exception {
// 객체 소멸 로직 (메모리 회수, 연결 종료 등)
}
}
단점 : 코드를 고칠 수 없는 외부 라이브러리에 적용 불가능
인터페이스를 구현하는 것이 아니라 @Bean Anootation에 initmethod,destroyMehod를 속성으로 초기화 하여 각각 지정한다.
public class ExampleBean {
public void init() throws Exception {
//초기화 콜백
}
public void close() throws Exception {
// 소멸 전 콜백
}
}
@Configuration
class LifeCycleConfig {
@Bean(initMethod = "init", destroyMethod = "close")
public ExampleBean exampleBean() {
}
}
@PostConstruct
: 기본 생성자를 사용하여 빈이 생성된 후 인스턴스가 요청 객체에 반환되기 직전에 주석이 달린 메서드가 호출됩니다.
@PreDestroy
: @PreDestroy주석이 달린 메소드는 bean이 bean 컨테이너 내부 에서 파괴되기 직전에 호출됩니다 .
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
public class DemoBean
{
@PostConstruct
public void customInit()
{
System.out.println("Method customInit() invoked...");
}
@PreDestroy
public void customDestroy()
{
System.out.println("Method customDestroy() invoked...");
}
}
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans-definition
https://dodokwon.tistory.com/57