스프링의 IoC컨테이너는 Bean을 관리한다. 의존성을 관리해주고 객체들을 싱글톤으로 관리해주며 이번에 설명할 Bean의 생성과 소멸까지의 Lifecycle을 관리하는 역할 또한 가지고 있다. Spring Bean의 Life Cycle은 간단하게 보면 "객체 생성 > 의존관계 주입" 순서로 이루어진다. 그렇기 때문에 의존관계 주입이 다 끝난 이후에야 우리가 사용할 테이터에 값이 채워지며 전 초기화 단계에서는 null인 상태로 존재한다. 1. Spring Bean의 Lifecycle 1. 스프링 IoC 컨테이너 생성 2. Bean 생성 : IoC컨테이너는 컴포넌트 스캔을 통해 빈을 찾아서 등록한다(@Component, @Bean.. 등). 이 과정에서 기본 생성자를 호출하여 객체를 만든다. // 생성자 주..
spring bean
상속 관계에 있는 스프링 빈을 조회하는 방법에 대해 알아볼 것이다. 스프링 빈은 부모 타입으로 조회하면 자식 타입도 함께 조회한다. 1번 노드가 최상이 루트 빈인데, 모든 자바 객체의 루트는 Object 타입이기 때문에 1번 부모 빈을 포함한 전체 빈을 조회하고 싶으면 Object타입으로 조회하면 된다. 1. 부모 타입으로 조회 - 자식이 여러개 존재 @Test @DisplayName("부모 타입으로 조회시, 자식이 둘 이상 있으면, 중복 오류가 발생한다.") void findBeanByParentTypeDuplicate() { //DiscountPolicy bean = ac.getBean(DiscountPolicy.class); assertThrows(NoUniqueBeanDefinitionExcept..
Bean이란 스프링 컨테이너가 관리해주는 Java 객체이다. 이 스프링 빈을 조회하는 방법에 대해서 기록해서 기억하려고 한다. 스프링 컨테이너를 아래와 같이 AppConfig에 구현했다. @Bean을 통해 스프링 컨테이너에 아래의 메서드들을 빈으로 등록했다. 현재 컨테이너에는 memberService, memberRepository, orderService, discountPolicy가 등록되어있다. @Configuration public class AppConfig { @Bean public MemberService memberService() { System.out.println("Call AppConfig.memberService()"); return new MemberServiceImpl(memb..
1. IoC(Inversion of Control)이란? Inversion Of Control을 그대로 번역해 보면 제어의 역전이다. 기존 자바 프로그램에서는 각 객체들이 프로그램의 흐름을 결정하고 필요한 객체를 직접 new ~ 해서 객체를 생성하고 사용했다. 즉 모든 작업을 프로그래머가 제어하며 추상 객체가 아닌 구현 객체가 프로그램의 제어 흐름을 스스로 조종했다. 다르게 말하면 의존성이 높은 코드를 만드는 것이다. 하지만 프로그램의 제어 흐름에 대한 권한을 직접 제어하는, 즉 의존성이 높은 코드는 코드의 유지 보수를 어렵게 하고 재사용을 방해한다. 그렇기 때문에 객체에 대한 제어권을 객체가 직접 가지고 있는 것이 아니라 외부에서 관리하는 것을 제어의 역전(IoC)라고 한다. 프로그램은 내가 어떤 유형..