인프런 - 스프링/핵심 원리

[Spring] 스프링 컨테이너와 스프링 빈

서하빈 2023. 7. 18. 02:04

스프링 컨테이너와 스프링 빈

- ApplicationContext를 스프링 컨테이너라 한다.

더 정확히는 스프링 컨테이너를 부를 때 BeanFactory, ApplicationContext로 구분해서 이야기한다.

 

- 스프링 컨테이너에서 관리하는 객체를 빈이라고 한다.

 

 

빈 조회 예시 코드

public class MemberApp {
	public static void main(String[] args) {
    	ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
    	MemberService memberService = applicationContext.getBean("memberService", MemberService.class);
        
        ...
    }
}

 

 

BeanFactory와 ApplicationContext

BeanFactory

- 스프링 컨테이너의 최상위 인터페이스다.

- 스프링 빈을 관리하고 조회하는 역할을 담당한다.

 

ApplicationContext

- 부가 기능을 제공한다.

- 메시지소스를 활용한 국제화 기능

- 환경변수

- 애플리케이션 이벤트

- 편리한 리소스 조회

 

다양한 설정 형식 지원 - 자바 코드, XML

- 스프링 컨테이너는 다양한 형식의 설정 정보를 받아드릴 수 있게 유연하게 설계되어 있다.

 

XmlAppConfig 사용 자바 코드

 

xml 기반의 스프링 빈 설정 정보

 

다양한 설정 형식을 지원할 수 있는 이유? - BeanDefinition

- BeanDefinition은 빈 설정 메타정보다.

- 스프링 컨테이너는 이 메타정보를 기반으로 스프링 빈을 생성한다.

 

- AnnotationConfigApplicationContext는 AnnotatedBeanDefinitionReader를 사용해서 AppConfig.class를 읽고 BeanDefinition을 생성한다.

 

 

BeanDefinition 정보

- BeanClassName: 생성할 빈의 클래스 명(자바 설정 처럼 팩토리 역할의 빈을 사용하면 없음)

- factoryBeanName: 팩토리 역할의 빈을 사용할 경우 이름, 예) appConfig

- factoryMethodName: 빈을 생성할 팩토리 메서드 지정, 예) memberService

- Scope: 싱글톤(기본값)

- lazyInit: 스프링 컨테이너를 생성할 때 빈을 생성하는 것이 아니라, 실제 빈을 사용할 때까지 최대한 생성을 지연처리 하는지 여부

- InitMethodName: 빈을 생성하고, 의존관계를 적용한 뒤에 호출되는 초기화 메서드 명

- DestroyMethodName: 빈의 생명주기가 끝나서 제거하기 직전에 호출되는 메서드 명

- Constructor arguments, Properties: 의존관계 주입에서 사용한다. (자바 설정 처럼 팩토리 역할의 빈을 사용하면 없음)

 

 

출처: 인프런 김영한님의 스프링 핵심 원리 - 기본편

 

스프링 핵심 원리 - 기본편 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., 스프링 핵심 원리를 이해하고, 성장하는 백엔드 개발자가 되어보세요! 📢

www.inflearn.com