-
(스프링 기본) 7 - 스프링 컨테이너 생성개발/Spring 2024. 10. 7. 22:39
ApplicationContext 는 스프링 컨테이너고 인터페이스이다.
이러한 인터페이스를 구현한 것 중의 하나가 AnnotationConfigApplicationContext 이다.
스프링 컨테이너는 XML 기반으로 만들 수도 있고, 다음과 같이 애노테이션 기반의 자바 설정 클래스로 만들 수 있다.
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
다음 코드는 애노테이션 기반의 자바 설정 클래스로 만든 것이다.
※ 최근에는 XML 기반으로 만들지는 않는다.
파라미터로는 AppConfig.class 를 넣어준다.
AnnotationConfigApplicationContext 은 ApplicationContext 의 구현체인 것이다.
애노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 생성해주고,
해당 컨테이너 생성할 때 구성 정보를 지정해줘야 하는데 여기서 파라미터인 AppConfig.class 가 바로 구성정보이다.
이렇게 되면 AppConfig.class 에 있는 @Bean 어노테이션이 붙은 정보를 스프리이 컨테이너가 저장하게 된다.
메서드 이름이 빈의 이름이 되고, 반환되는 객체가 빈 객체로 저장된다.
※ 빈 이름은 직접 부여가 가능하다.
ex) @Bean(name ="memberService2")
단, 빈 이름은 항상 다른 이름을 부여해야 한다.
만약 같은 이름 부여 시, 다른 빈이 무시되거나, 기존 빈을 덮어버리는 등 설정 오류가 생긴다.
스프링 컨테이너는 설정 정보를 참고해서 의존관계를 주입(DI)한다.
의존관계는 화살표를 참고하자.
단순히 자바 코드 호출 같아 보이지만 차이가 있다. (싱글톤 시간에 설명 예정)
이렇게 애플리케이션 실행 시점에 실제 생성된 객체 인스턴스의 참조가 연결된 의존 관계,
즉 동적인 객체 인스턴스 의존 관계가 형성된다.
따라서 위에 코드에서는 memberRepository 는 MemoryMemberRepository 메모리 회원 저장소를,
하단의 discountPolicy 는 RateDiscountPolicy 를 따르게 되는 것이다.
출처 : 김영한 스프링 핵심 원리(기본)
'개발 > Spring' 카테고리의 다른 글
(스프링 기본) 9 - BeanFactory 와 ApplicationContext (0) 2024.10.09 (스프링 기본) 8 - 컨테이너에 등록된 모든 빈 조회 (1) 2024.10.09 (스프링 기본) 6 - spring 으로 전환하기 (0) 2024.10.07 (스프링 기본) 5 - 객체 지향 설계와 스프링 (2) 2024.10.02 (스프링 기본) 4 - 좋은 객체 지향 설계 5가지(SOLID) (1) 2024.10.02