스프링 컨테이너 생성
ApplicationContext 를 스프링 컨테이너라 하고 인터페이스다. >> 다형성이 적용 되어있다.
xml기반으로 만들 수 있고, 에노테이션 기반의 자바 설정 클래스를 만들 수 있다.
더 정확히는 스프링 컨테이너를 BeanFactory / ApplicationContext 로 구분해서 말한다.
보통은 ApplicationContext 를 스프링컨테이너
1. 컨테이너 생성
new AnnotationConfigApplicationContext(AppConfig.class)
Application 인터페이스의 구현체
1. appconfig에 정보를 준다.
2. 컨테이너가 만들어진다.
3. key는 빈 이름 value 는 빈 객체
4. appconfig.class구성 정보 활용
스프링 컨테이너를 생성할 때 구성 정보를 지정해주어야 한다.
2. 스프링 빈 등록
- 빈 이름은 메소드명 / 직접 부여 가능 @Bean(name="~~")
- 빈 이름은 항상 다른 이름을 부여 해야함 같으면 덮어버리거나 설정에 따라 오류 발생
자바의 보통 객체가 스프링 컨테이너에 의해서 관리되면 그것은 스프링 빈 이다
3. 스프링 빈 의존관계 설정
- 의존관계를 넣어줌
memberService, orderserivce > MemberRepository
orderService > discountPolicy
> 의존관계 주입 DI
스프링은 빈 생성/ 의존관계 주입하는 단계가 나누어져 있음 빈을 등록하면 생성자를 호출하면서 의존관계 주입을 한번에 처리한다.
부모 타입으로 조회시, 자식 타입도 함께 조회된다.
모든 자바 객체의 최고 부모는 Object >> object 타입으로 조회하면 모든 스프링 빈을 조회한다.
BeanFactory
- 스프링 컨테이너의 최상위 인터페이스.
- 스프링 빈을 관리, 조회
ApplictionContext
- BeanFactory기능을 상속 받아 사용
차이??
app 을 개발할 때 빈은 관리하고 조회하는 기능은 물론, 수 많은 부가기능이 필요하다
ApplictionContext 가 제공하는 부가기능
1. 메세지 소스를 활용한 국제화 기능
2. 환경변수 : 로컬,개발, 운영 등을 구분해서 처리
3. 애플리케이션 이벤트 이벤트를 발행하고 구독하는 모델을 편리하게 지원
4. 편리한 리소스 조회
즉 ApplictionContext 는 위에 BeanFactory 말고 4가지를 더 상속받는다.
-스프링 빈 설정 메타 정보 : BeanDefinition
스프링 >> 다양한설정 형식 지원 그 중심에는 BeanDefinition 이라는 추상화 >> 역할과 구현을 개념적으로 나눔
스프링 컨테이너는 BeanDefinition 만 알면됨
스프링 컨테이너는 메타정보 기반으로 스프링 빈을 생성한다.
댓글