스프링 컨테이너, Application Context

szlee·2023년 10월 21일
0

Spring

목록 보기
1/15

스프링

  • 자바 언어 기반의 프레임워크
  • 자바 언어의 가장 큰 특징 - 객체 지향!
  • 스프링은 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크

-> 스프링은 좋은 객체 지향 어플리케이션을 개발할 수 있게 도와주는 프레임워크


스프링 컨테이너

: 스프링 프레임워크의 핵심 컴포넌트.
자바 객체의 생명주기를 관리하며, 생성된 자바 객체들에게 추가적인 기능 제공.
스프링에서 자바 객체는 빈(bean)이라 한다.

스프링 컨테이너는 XML, 어노테이션 기반의 자바 설정 클래스로 만들 수 있다.
스프링 부트 사용 이전에는 XML을 통해 직접 설정해주어야 했지만 스프링 부트가 등장하며 사용하지 않게 되었다.

스프링 컨테이너 종류

BeanFactory

스프링 컨테이너의 최상위 인터페이스
스프링 빈을 관리하고 조회하는 역할
getBean()제공하여 빈을 인스턴스화할 수 있다.
@Bean 어노테이션이 붙은 메서드의 이름을 스프링 빈의 이름으로 사용하여 빈 등록을 한다.

ApplicationContext

BeanFactory 기능을 모두 상속받아서 제공
애플리케이션을 개발할 때는 빈을 관리하고 조회하는 기능은 물론이고 수많은 부가기능이 필요.

  • 메시지 소스를 활용한 국제화 기능 : 한국에서 들어오면 한국어로, 영어권에서 들어오면 영어로
  • 환경변수 : 로컬, 개발, 운영 등 구분해서 처리
  • 애플리케이션 이벤트 : 이벤트를 발행하고 구독하는 모델을 편리하게 지원
  • 편리한 리소스 조회 : 파일, 클래스패스, 외부 등에서 리소스를 편리하게 조회
    , 빈을 관리하고 검색하는 기능을 BeanFactory가 제공하고, 그 외의 부가 기능을 제공한다.

ApplicationContext는 빈 관리기능 + 편리한 부가 기능을 제공한다.

BeanFactory를 직접 사용할 일은 거의 없다. 부가기능이 포함된 ApplicationContext를 사용한다.
ApplicationContext = 스프링 컨테이너.

스프링 컨테이너는 빈의 인스턴스화, 구성, 전체 생명주기 및 제거까지 관리.
컨테이너는 개발자가 정의한 빈을 객체로 만들어 관리하고 개발자가 필요로 할 때 제공한다.
의존성 주입(DI)을 통해 애플리케이션의 컴포넌트를 관리할 수 있다.

스프링 컨테이너는 서로 다른 빈을 연결하여 애플리케이션 빈을 연결하는 역할을 한다.
객체들 간의 의존 관계를 스프링 컨테이너가 런타임 과정에서 알아서 만들어 준다.

스프링 컨테이너 사용 이유?

객체를 생성하려면 new 생성자를 사용해야 한다.
이로 인해 어플리케이션 안에는 수많은 객체가 존재하고 서로를 참조.
객체 간 참조가 많다는 건 의존성이 높다는 것.
낮은 결합도와 높은 캡슐화를 지향하는 객체지향 프로그래밍 방식에 맞지 않음.
스프링 컨테이너를 사용하면 구현 클래스에 있는 의존성을 제거하고 인터페이스에만 의존하도록 설계할 수 있다.


스프링 컨테이너에 빈 등록하는 방법

설정 파일에 @Configuration 어노테이션 붙인다.
해당 어노테이션을 붙이면 가시적으로 이거 설정파일이다, 빈 등록할거다 라는 것 알 수 있다.
해당 파일 안에 객체들에 @Bean 어노테이션을 붙인다.

Application Context 작동 방식

  1. 어플리케이션 설정 정보 읽어 빈 등록
    XML, 자바 설정 클래스, 어노테이션 기반 설정 등 다양한 형태로 제공
  2. 빈 초기화 및 의존성 주입
  3. 애플리케이션은 필요한 빈을 Application Context로부터 가져와 사용.
    필요한 경우 빈의 수명 주기를 관리하는 메소드들도 Application Context가 호출
profile
🌱

0개의 댓글