Spring Bean 알아보기
Spring Bean이란?
Bean은 Spring Container에 의해 관리되는 객체로 Spring 애플리케이션의 핵심 구성 요소로 사용된다.
Spring Bean을 알아보기 이전에 Bean이 등록되는 Spring Container는 세트라고 생각하고 공부하는 것이 개념이 이어져서 같이 알아보도록 하자
Spring Container란?
Spring Container는 생성된 Bean을 가지고 있는 통이라고 생각하면 쉽다. 아래 Container 생성부터 사용되는 방법을 확인해 보자.
Spring Container 생성 (Java코드)
ApplicationContext applicationContext =
new AnnotationConfigApplicationContext(AppConfig.class);
스프링 컨테이너는 XML을 기반으로 만들 수도 있고, 애노테이션 기반의 자바 설정 클래스로 만들 수 있다.
@Bean 어노테이션으로 Bean등록, XML 파일을 읽어 Bean을 등록 비교
빈 이름은 항상 다른 이름을 부여해야 한다. 같은 이름을 부여하면, 다른 빈이 무시되거나, 기존 빈을 덮어버리거나 설정에 따라 오류가 발생한다.
스프링 컨테이너는 XML을 기반으로 만들 수도 있고, 애노테이션 기반의 자바 설정 클래스로 만들 수 있는 이유는 상속관계 때문이다.
상속 관계도
스프링 컨테이너는 다양한 형식의 설정 정보를 받아들일 수 있게 유연하게 설계되어 있다.
- BeanFactory는 Spring Container의 최상층 인터페이스로 Spring Bean을 관리하고 조회하는 역할을 담당한다.
- ApplicationContext는 애플리케이션을 개발할 때 Spring Container에서 부족한 부가기능이 추가되었다.
(환경변수, 국제화, 이벤트, 리소스 관리)
Spring Bean과 Container 이해하기
Spring Bean 등록
Spring Bean 의존관계 설정
설정 정보를 참고해서 의존관계를 주입(DI) 과정
스프링은 빈을 생성하고, 의존관계를 주입하는 단계가 나누어져 있다. 그런데 이렇게 자바 코드로 스프링 빈을 등록하면 생성자를 호출하면서 의존관계 주입도 한 번에 작업할 수 있다.
Bean의 생명주기
대표적으로 많이 사용되고 있는 Spring Bean 생성자 주입의 생명주기를 살펴보면, Spring 컨텍스트가 초기화될 때 @Component, @Service, @Repository, @Controller 등으로 어노테이션된 모든 클래스가 빈으로 등록되고 초기화된다. Spring Bean 생성자 주입에서는 @Autowired를 사용하여 의존성을 주입한다. 이를 통해 @Autowired를 사용하면 의존성 주입과 Spring Bean 등록이 Spring 컨텍스트가 초기화될 때 Container에 담겨 관리되는 것을 알 수 있다.
생성사 주입 방법
@Component
public class MemberServiceImpl implements MemberService{
private final MemberRepository memberRepository; // = new MemoryMemberRepository();
@Autowired
public MemberServiceImpl(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
}
의존관계 주입 방법 4가지
https://yukang-laboratory.tistory.com/31
의존관계 주입 방법 4가지
의존관계 주입 방법 4가지 생성자 주입 방법 생성자를 통해서 의존 관계를 주입받는 방식으로 애플리케이션이 시작 후 생성자 호출 시점에 딱 1번만 호출되는 것이 보장되며 불변(final), 필수(notN
yukang-laboratory.tistory.com
'CS > Spring' 카테고리의 다른 글
동시성 제어 방식 알아보기 (0) | 2025.02.02 |
---|---|
TDD 방법론 알아보기 (4) | 2024.12.29 |
DataSource 알아보기 (0) | 2024.03.31 |
Connection Pool 이해하기 (3) | 2024.03.23 |
Spring MVC과 관심사 분리 (1) | 2024.03.17 |