왜 Spring Bean을 알아야 할까?
Spring의 핵심은 객체를 대신 관리해준다는 점입니다.
개발자는 객체 생성, 의존성 관리, 초기화 등을 신경 쓰지 않고,
핵심 비즈니스 로직에 집중할 수 있습니다.
이 모든 객체 관리를 담당하는 것이 바로 Spring Bean입니다.
즉, Bean을 이해해야 Spring을 제대로 활용할 수 있습니다.
Spring Bean이란?
Spring Bean이란 Spring IoC 컨테이너가 관리하는 자바 객체를 말합니다.
개발자가 직접 생성하지 않고, Spring이 객체를 만들고 생명주기를 관리합니다.
- Bean은 주로 서비스 클래스, DAO, 리포지토리, 설정 클래스 등으로 사용됩니다.
@Component
,@Service
,@Repository
,@Controller
등의 어노테이션을 통해 등록할 수 있습니다.
Bean 등록 방법 3가지
- 어노테이션 기반 등록 (자동)
또는@Component public class HelloService { }
@Service public class UserService { }
- Java Config 기반 등록 (수동)
@Configuration public class AppConfig { @Bean public HelloService helloService() { return new HelloService(); } }
- XML 설정 기반 등록 (구식)
<bean id="helloService" class="com.example.HelloService" />
Bean 생명주기란?
Spring Bean은 단순히 생성되는 것으로 끝나지 않습니다.
생성 → 의존성 주입 → 초기화 → 사용 → 소멸의 생명주기를 가지고 있습니다.
Spring은 이 전 과정을 자동으로 관리하며, 개발자는 중간에 개입할 수 있는 다양한 방법을 제공합니다.
Bean 생명주기 단계별 설명
- 객체 생성 – new 키워드 없이 스프링이 객체 생성
- 의존성 주입 – 필요한 Bean을 자동으로 주입
- 초기화 –
@PostConstruct
또는afterPropertiesSet()
- 사용
- 소멸 –
@PreDestroy
또는destroy()
2025.06.22 - [JAVA/Spring & SpringBoot] - 의존성 주입이란? DI(Dependency Injection)에 대하여
의존성 주입이란? DI(Dependency Injection)에 대하여
DI란 무엇인가?DI(Dependency Injection, 의존성 주입)는 객체 간의 의존 관계를 Spring 프레임워크가 대신 관리해주는 기능입니다.개발자가 직접 객체를 생성하고 주입하는 방식이 아니라,Spring이 필요한
yongdy.tistory.com
@PostConstruct / @PreDestroy
@Component
public class MyBean {
@PostConstruct
public void init() {
System.out.println("초기화 로직 실행");
}
@PreDestroy
public void destroy() {
System.out.println("소멸 전 정리 작업");
}
}
@PostConstruct
: 의존성 주입 완료 후 자동 호출@PreDestroy
: 컨테이너 종료 직전에 호출
Bean Scope 종류와 비교
Scope | 설명 | 특징 |
---|---|---|
Singleton | 기본값, 한 개의 인스턴스만 생성 | 대부분의 경우 사용 |
Prototype | 요청마다 새 인스턴스 생성 | 상태 유지가 필요한 경우 |
Request | 웹 요청마다 Bean 생성 | 웹 애플리케이션 전용 |
Session | 세션마다 Bean 생성 | 로그인 상태 유지 등에 활용 |
로그로 생명주기를 확인하는 예제
✅애플리케이션 실행 시 로그로 확인해보면, 생명주기의 흐름을 눈으로 볼 수 있어 이해에 큰 도움이 됩니다.
@Component
public class LifecycleBean {
public LifecycleBean() {
System.out.println("1. 생성자 호출");
}
@PostConstruct
public void init() {
System.out.println("2. @PostConstruct 호출");
}
@PreDestroy
public void cleanup() {
System.out.println("3. @PreDestroy 호출");
}
}
'JAVA > Spring & SpringBoot' 카테고리의 다른 글
Spring AOP란? 관점 지향 프로그래밍? (0) | 2025.06.24 |
---|---|
Spring 어노테이션 @Component, @Service, @Repository 차이점 (0) | 2025.06.23 |
의존성 주입이란? DI(Dependency Injection)에 대하여 (0) | 2025.06.22 |
[Spring] @Value 어노테이션 (0) | 2024.11.07 |