📘 목차
1. Bean 생명주기
Spring이 Bean을 생성하고 의존성을 주입한 뒤, 초기화 작업을 수행하고, 필요 시 종료 메서드를 호출하는 일련의 과정을 의미한다.
생명주기 요약
- Spring Container 초기화
- Bean 인스턴스 생성
- 의존성 주입 (DI)
- 초기화 메서드 호출 (@PostConstruct, afterPropertiesSet())
- Bean 생성 및 의존관계 설정이 완료된 후 호출
- Bean 사용
- 소멸 메서드 호출 (@PreDestroy, destroy())
- Bean이 소멸되기 직전에 호출
- Bean 소멸
2. 생명주기 콜백 종류
Spring은 Bean의 초기화와 소멸 시점에 사용자 정의 로직을 삽입할 수 있도록 다양한 콜백 수단을 제공한다.
InitializingBean & DisposableBean 인터페이스
- InitializingBean은 초기화 콜백을 제공한다.
- DisposableBean은 소멸 콜백을 제공한다.
- 단점: Spring에 종속적이며, 하나의 Bean이 여러 인터페이스를 동시에 구현하면 관리가 복잡해진다.
public class MyBean implements InitializingBean, DisposableBean {
@Override
public void afterPropertiesSet() {
// 초기화 로직
System.out.println("afterPropertiesSet 호출됨");
}
@Override
public void destroy() {
// 소멸 로직
System.out.println("destroy 호출됨");
}
}
@PostConstruct, @PreDestroy 어노테이션
- Java 표준 어노테이션으로 Spring뿐만 아니라 다른 프레임워크에서도 사용 가능하다.
- 권장 방식: 명확하고 가독성 좋으며, Spring에 종속되지 않는다.
@Component
public class MyBean {
@PostConstruct
public void init() {
System.out.println("초기화 메서드 실행");
}
@PreDestroy
public void cleanup() {
System.out.println("소멸 메서드 실행");
}
}
@Bean의 initMethod, destroyMethod 속성
- Java Config를 사용하는 경우, 메서드 이름을 직접 지정할 수 있다.
- 외부 라이브러리 등 수정할 수 없는 클래스에도 초기화/소멸 로직 지정 가능.
@Configuration
public class AppConfig {
@Bean(initMethod = "init", destroyMethod = "cleanup")
public MyBean myBean() {
return new MyBean();
}
}
public class MyBean {
public void init() {
System.out.println("초기화 메서드 실행");
}
public void cleanup() {
System.out.println("소멸 메서드 실행");
}
}
* 정리
| 방법 | 초기화 | 소멸 | 특징 |
| InitializingBean, DisposableBean | afterPropertiesSet() | destroy() | Spring 인터페이스 구현 |
| @PostConstruct, @PreDestroy | @PostConstruct | @PreDestroy | Java 표준, 가장 추천 |
| @Bean(initMethod, destroyMethod) | 지정한 메서드명 | 지정한 메서드명 | 외부 클래스 적용 가능 |
3. Bean Scope
Bean Scope
- Spring 컨테이너에서 Bean이 어떻게 생성되고 관리되는지를 정의하는 개념으로 Spring은 다양한 범위(스코프)를 제공하여 Bean의 생명주기를 설정할 수 있다.
- 각 스코프는 Bean이 얼마나 오래 유지되는지, 여러 번 사용할 수 있는지 등을 결정한다.
Bean Scope 종류
- 싱글톤(singleton)
- Spring 컨테이너당 하나의 Bean만 생성된다.
- 기본 스코프이며, 모든 요청이 같은 인스턴스를 공유한다.
- 프로토타입(prototype)
- Bean을 요청할 때마다 매번 새로운 인스턴스를 생성한다.
- 초기화까지만 Spring이 관리하고, 소멸은 직접 해야 한다. 필요한 의존관계를 주입한다.
- 웹 스코프
- request: 하나의 HTTP 요청마다 새로운 Bean이 생성되고, 요청이 끝나면 소멸된다. 주로 Web MVC에서 사용된다.
- session: 하나의 HTTP 세션 동안 같은 Bean 인스턴스를 유지한다.
- application: 하나의 ServletContext 범위에서 Bean을 공유한다.
- websocket: 하나의 WebSocket 세션 동안 같은 Bean 인스턴스를 유지한다.
Bean Scope 등록 방법
/* 자동 등록 */
@Scope("prototype") // 또는 "singleton", "request", "session" 등
@Component
public class MyBean {
...
}
/* 수동 등록 */
@Configuration
public class AppConfig {
@Bean
@Scope("prototype") // 또는 "singleton", "request", "session" 등
public MyBean myBean() {
return new MyBean();
}
}'Spring > 강의' 카테고리의 다른 글
| [📘 심화 Spring] 3-3. JPQL (Java Persistence Query Language) (2) | 2025.06.09 |
|---|---|
| [📘 심화 Spring] 3-2. API 예외 처리 (0) | 2025.06.09 |
| [📘 심화 Spring] 2-2. JPA 고급 매핑 (0) | 2025.06.09 |
| [📘 심화 Spring] 2-1. JPA 연관관계 매핑 (1) | 2025.06.09 |
| [📘 심화 Spring] 1. Converter, Formatter (0) | 2025.06.09 |