자바 객체(빈)의 생명주기 관리 및 생성된 인스턴스들에게 추가적인 기능 제공
빈 생성, 관리, 제거 역할
개발자가 진행하는 객체 생성 및 소멸을 대신 수행
런타임 과정에서 객체들 간 의존 관계 생성
작성한 코드의 처리 과정을 위임받은 독립 받은 존재
파라미터로 들어온 설정 클래스 정보를 스프링 빈에 등록
스프링 컨테이너를 통해 원하는 만큼 많은 객체를 가질 수 있음
의존성 주입을 통해 애플리케이션 컴포넌트 관리
각각의 빈을 연결하여 애플리케이션의 빈 연결
모듈간 의존 및 결합으로 발생하는 문제에서 자유로움
객체를 사용하기 위해서는 new 생성자
를 사용해야하는데 그렇게 되면 객체가 무수히 많이 존재하고 서로 참조하게 된다. 이렇게 되면 의존성이 높아지고 이는 낮은 결합도와 높은 캡슐화를 핵심으로 가지는 객체지향 프로그래밍에서 벗어날 수 밖에 없다.
기존 방식에 따르면 변경 사항 수정 시 매우 비효율적이고 의존도가 높아져 더 많은 코드를 수정해야한다.
스프링 컨테이너를 사용한다면 의존을 제거하고 인터페이스에 의존하도록 설계가 가능한다.
그렇기 때문에 객체 간의 의존성을 낮추기 위한 목적으로 스프링 컨테이너를 사용한다.
스프링 컨테이너의 최상위 인터페이스
스프링 빈 관리 및 조회 역할
getBean()
메소드 → 빈 인스턴스화
빈 등록시 @Bean
메서드 명을 스프링 빈의 이름으로 사용
출처: https://devlogofchris.tistory.com/m/71
Bean Factory 상속 → 빈 관리 및 조회
부가 기능 제공
MessageSource: 메세지 다국화를 위한 인터페이스
EnvironmentCapable: 개발, 운영 등 환경을 분리하여 처리하고, 애플리케이션 구동 시 필요한 정보들을 관리하기 위한 인터페이스
ApplicationEventPublisher: 이벤트 관련 기능을 제공하는 인터페이스
ResourceLoader: 파일, 클래스 패스, 외부 등 리소스를 편리하게 조회하기 위한 인터페이스
스프링 컨테이너에 의해 관리되는 재사용 소프트웨어 컴포넌트
스프링 컨테이너가 관리하는 자바 객체
인스턴스화된 객체
스프링 컨테이너에 등록된 객체
@Bean
이 적힌 메서드를 호출해서 반환된 객체를 컨테이너에 등록
클래스의 등록 정보 및 게터, 세터 메서드를 포함함
컨테이너에 사용되는 설정 메타데이터로 생성(BeanDefinition) → XML 또는 자바 애너테이션과 코드로 표현, 컨테이너의 명령 및 인스턴스화, 설정, 조립할 객체 정의
빈 설정 메타정보(BeanDefinition)
속성에 따라 컨테이너의 빈 관리 및 생성 방식 결정
@Bean
, <Bean>
당 1개의 메타 정보 생성
@Configuration
: 구성 정보를 담당하는 것을 설정할 때 붙여주는 애너테이션
@Bean
: 각 메서드에 해당 애너테이션을 붙이면 스프링 컨테이너에 등록됨