⚙️
@Bean속성이란?
- Spring에서 생명주기 콜백을 지원하는 방법으로,
설정 정보에 초기화 메서드와 종료 메서드를 지정하는 방법을 사용할 수 있음- 이 방법을 선택하면 외부 라이브러리에도 콜백 메서드를 사용할 수 있음
🎯 설정 정보에서 초기화/소멸 메서드 지정
→ @Bean(initMethod = "메서드명", destroyMethod = "메서드명")
@Configuration
public class AppConfigV2 {
@Bean(initMethod = "init", destroyMethod = "close")
public MyBeanV2 myBeanV2() {
MyBeanV2 myBeanV2 = new MyBeanV2();
myBeanV2.setData("Example");
return myBeanV2;
}
}
✅ 특징
💡 destroyMethod는 기본적으로 close · shutdown 이름을 자동 인식 → 생략 가능
🏷️
@PostConstruct,@PreDestroy
- Java 표준 어노테이션 → Spring이 아니어도 동작
- 최신 Spring에서 가장 권장되는 방법
✨ 주요 어노테이션
1. @PostConstruct
2. @PreDestroy
public class MyBeanV3 {
private String data;
@PostConstruct
public void init() {
System.out.println("초기화 메서드 실행");
}
@PreDestroy
public void destroy() {
System.out.println("소멸 메서드 실행");
}
}
⚠️ 단점
@Bean(initMethod, destroyMethod) 사용📦 Bean Scope (스코프)
- Bean이 얼마나 오래, 어떤 범위에서 유지되는지를 결정하는 개념
1. 🟢 싱글톤(Singleton)

@Scope("singleton") // 생략 가능
@Bean
public SingletonBean singletonBean() { ... }
✅ 특징
Service, Repository 계층에서 사용2. 🟡 프로토타입(Prototype)
@PreDestroy)은 관리 안 함

@Scope("prototype")
@Bean
public ProtoTypeBean protoTypeBean() { ... }
✅ 특징
❌ 단점: 직접 소멸 관리 필요 (close 호출 X → 리소스 누수 위험)
3. 🌐 웹 스코프(Web Scope)
→ 웹 애플리케이션 전용 스코프
✅ 사용처
request: 컨트롤러 요청 처리용 객체session: 사용자 로그인 정보 유지 객체🧠 요약 정리
생명주기 관리
@Bean(initMethod, destroyMethod) → 외부 라이브러리에도 적용 가능@PostConstruct, @PreDestroy → 실무 권장 방식Bean Scope
⚙️ 초기화 & 소멸 메서드 설정 방법
| 방법 | 설명 | 장점 | 단점 | 예시 |
|---|---|---|---|---|
@Bean(initMethod, destroyMethod) | 설정 클래스에서 메서드 지정 | - Spring 의존 없음 - 메서드명 자유롭게 설정 - 외부 라이브러리에도 적용 가능 | 코드와 설정이 분리됨 | @Bean(initMethod="init", destroyMethod="close") |
@PostConstruct / @PreDestroy | Bean 내부에 어노테이션 붙여 초기화/소멸 지정 | - 가장 단순 - Spring 권장 방식 - 코드 안에서 바로 확인 가능 | 외부 라이브러리엔 적용 불가 | @PostConstruct public void init() {} |
📦 Bean Scope 종류
| 스코프 | 생성 시점 | 소멸 관리 | 사용처 | 특징 |
|---|---|---|---|---|
| Singleton (기본) | 컨테이너 시작 시 1회 생성 | Spring이 관리 | Service, Repository | 전역 공유 Bean, 상태 없음 |
| Prototype | Bean 요청 시마다 생성 | 클라이언트가 직접 관리 | 임시 객체 (상태 있음) | @PreDestroy 실행 안 됨 |
| Request | HTTP 요청 시 생성 | 요청 종료 시 소멸 | 웹 요청 처리 Bean | 요청마다 독립 객체 |
| Session | 웹 세션 시작 시 | 세션 종료 시 소멸 | 로그인 사용자 정보 | 세션 단위 공유 |
| Application | 웹 앱 시작 시 | 앱 종료 시 소멸 | 전체 애플리케이션 리소스 | 서블릿 컨텍스트 범위 |