
스프링 빈 설정 메타 정보 - BeanDefinition 코드 레벨로 더 깊이 들어가서 보면 BeanDefinition 살펴보기 BeanDefinition 정보 => 이 메타정보를 기반으로 실제 인스턴스를 생성할 수가 있음 package inflearn.spring_core.beandefinition; import inflearn.spring_core.config.AppConfig; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annota..

다양한 설정 형식 지원 - 자바 코드, XML 스프링 컨테이너는 다양한 형식의 설정 정보를 받아드릴 수 있게 유연하게 설계되어 있다. ex) 자바 코드, XML, Groovy 등 구조도 1. 애노테이션 기반 자바 코드 설정 사용 지금까지 했던 것 new AnnotationConfigApplicationContext(AppConfig.class) `AnnotationConfigApplicationContext` 클래스를 사용하면서 자바 코드로된 설정 정보를 넘기면 된다. 2. XML 설정 사용 최근에는 스프링 부트를 많이 사용하면서 XML기반의 설정은 잘 사용하지 않는다. 아직 많은 레거시 프로젝트 들이 XML로 되어 있고, 또 XML을 사용하면 컴파일 없이 빈 설정 정보를 변경할 수 있는 장점도 있으므로..

그림 BeanFactory ApplicationContext **ApplicatonContext가 제공하는 부가기능 ctrl +클릭 눌러보면 정리 ApplicationContext는 BeanFactory의 기능을 상속받는다. ApplicationContext는 빈 관리기능 + 편리한 부가 기능을 제공한다. BeanFactory를 직접 사용할 일은 거의 없다. 부가기능이 포함된 ApplicationContext를 사용한다. BeanFactory나 ApplicationContext를 스프링 컨테이너라 한다.

스프링 빈 조회 - 상속 관계 부모 타입으로 조회하면, 자식 타입도 함께 조회한다. 그래서 모든 자바 객체의 최고 부모인 `Object` 타입으로 조회하면, 모든 스프링 빈을 조회한다. 먼저 static 클래스 등록 // static 클래스 추가하여 빈 두 개 등록 @Configuration static class TestConfig { @Bean public DiscountPolicy rateDiscountPolicy() { return new RateDiscountPolicy(); } @Bean public DiscountPolicy fixDiscountPolicy() { return new FixDiscountPolicy(); } } 첫 번째 메서드 @Test @DisplayName("부모 타입으로..

Case 1) 조회 - 기본 스프링 컨테이너에서 스프링 빈을 찾는 가장 기본적인 조회 방법 `ac.getBean(빈이름, 타입)` `ac.getBean(타입)` 조회 대상 스프링 빈이 없으면 예외 발생 => `NoSuchBeanDefinitionException: No bean named 'xxxxx' available ApplicationContextBasicFindTest package inflearn.spring_core.beanfind; import inflearn.spring_core.config.AppConfig; import inflearn.spring_core.member.MemberService; import inflearn.spring_core.member.MemberServiceImp..

스프링 컨테이너에 실제 스프링 빈들이 잘 등록이 되었는지 확인한다. ApplictaionContextInfoTest package inflearn.spring_core.beanfind; import inflearn.spring_core.config.AppConfig; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.AnnotationConfigApplicationContext; class ApplicationContextI..

스프링 컨테이너 생성 스프링 컨테이너의 생성 과정 1. 스프링 컨테이너 생성 2. 스프링 빈 등록 빈 이름 3. 스프링 빈 의존관계 설정 - 준비 4. 스프링 빈 의존관계 설정 - 완료 참고 스프링은 빈을 생성하고, 의존관계를 주입하는 단계가 나누어져 있다. 그런데 이렇게 자바 코드로 스프링 빈을 등록하면 생성자를 호출하면서 의존관계 주입도 한번에 처리된다. 여기서는 이해를 돕기 위해 개념적으로 나누어 설명했다. 자세한 내용은 의존관계 자동 주입에서 다시 다룬다. 정리* 스프링 컨테이너를 생성하고, 설정(구성) 정보를 참고해서 스프링 빈도 등록하고, 의존관계도 설정했다. 이제 스프링 컨테이너에서 데이터를 조회해보겠다.

스프링으로 전환하기 지금까지 순수한 자바 코드만으로 DI를 적용했다. 이제 스프링을 사용한다. AppConfig 스프링 기반으로 변경 package inflearn.spring_core.config; import inflearn.spring_core.discount.DiscountPolicy; import inflearn.spring_core.discount.RateDiscountPolicy; import inflearn.spring_core.member.MemberRepository; import inflearn.spring_core.member.MemberService; import inflearn.spring_core.member.MemberServiceImpl; import inflearn.spr..