Spring bean
2024. 11. 26. 15:19

✅ 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 라이프사이클

  1. Bean 객체 생성
  2. 의존성 주입(DI)
  3. 초기화(init)
  4. 사용
  5. 소멸(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이 실제로 생성되는 과정 (심화)

  1. Component Scan → Bean 후보 찾기
  2. Bean Definition 생성
  3. 의존성 그래프 분석
  4. 생성자 호출
  5. @Autowired 주입
  6. @PostConstruct 실행
  7. 싱글톤 캐시에 저장

이 과정이 매우 중요함 → 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