✅ 1. Spring Bean 이란?
스프링 컨테이너가 생성하고 관리하는 객체를 말한다.
개발자가 new로 직접 만드는 것이 아니라, 스프링이 대신 생성·초기화·소멸까지 lifecycle을 관리한다.
핵심 문장
Spring Bean = 스프링 IoC 컨테이너가 관리하는 객체
✅ 2. 왜 Bean 이 필요한가?
❓ new 로 객체 만들면 안 되나?
new 를 직접 사용하면 객체 간 강한 결합(의존성) 이 생기고,
테스트, 유지보수, 확장성이 떨어진다.
✔ Bean의 장점
| 기능 | 설명 |
| DI(의존성 주입) | 객체 간 의존성을 자동 연결 |
| 싱글톤 유지 | 성능·메모리 최적화 |
| 라이프사이클 관리 | init → destroy 등을 스프링이 알아서 |
| AOP 적용 가능 | 트랜잭션, 로깅, 보안 등 프록시 적용 쉬움 |
✅ 3. Bean 등록 방식 2가지
① 어노테이션 기반 자동 등록
클래스 위에 다음 중 하나를 붙이면 Bean 으로 등록된다.
- @Component
- @Service
- @Repository
- @Controller
@Service
public class HelloService {
public String hello() {
return "hello";
}
}
스프링은 classpath scanning 으로 자동 Bean 등록.
② Java Config로 수동 등록
@Configuration + @Bean 사용
@Configuration
public class AppConfig {
@Bean
public HelloService helloService() {
return new HelloService();
}
}
이 방식은 명확히 제어하고 싶을 때 사용됨
(라이브러리 객체 등록, 외부 API 설정 등)
✅ 4. Bean의 기본 스코프 (Scope)
스코프 = 객체 생성 방식
| 스코프 | 의미 |
| singleton (기본) | 스프링 컨테이너 당 1개 |
| prototype | 요청할 때마다 새로운 객체 |
| request | HTTP 요청마다 1개 (웹) |
| session | 세션마다 1개 (웹) |
@Scope("prototype")
@Component
public class Temp {
}
✅ 5. Bean 라이프사이클
- Bean 객체 생성
- 의존성 주입(DI)
- 초기화(init)
- 사용
- 소멸(destroy)
초기화/종료 메서드 정의:
@PostConstruct
public void init() {
// 초기화 로직
}
@PreDestroy
public void close() {
// 종료 로직
}
✅ 6. Bean과 IoC / DI 관계
✔ IoC(Inversion of Control)
객체 생성·관리 권한을 개발자가 아닌 Spring Container가 가진다.
✔ DI(Dependency Injection)
스프링이 객체를 만들어 놓고 필요한 곳에 자동 주입한다.
@Service
public class OrderService {
private final HelloService helloService;
@Autowired
public OrderService(HelloService helloService) {
this.helloService = helloService;
}
}
✅ 7. Bean이 실제로 생성되는 과정 (심화)
- Component Scan → Bean 후보 찾기
- Bean Definition 생성
- 의존성 그래프 분석
- 생성자 호출
- @Autowired 주입
- @PostConstruct 실행
- 싱글톤 캐시에 저장
이 과정이 매우 중요함 → AOP나 프록시 같은 기능도 이 과정 위에서 동작한다.
'Back-End > Spring' 카테고리의 다른 글
| Spring AOP (0) | 2024.11.27 |
|---|---|
| Spring - AutoWired (0) | 2024.11.27 |
| Spring기본 (0) | 2024.11.26 |
| Spring Legcy 기초 셋팅 (0) | 2024.11.26 |
| 쿠키(Cookie) (0) | 2024.11.19 |