목록Spring/핵심 원리 구현 (58)
코드 그라데이션
싱글톤 패턴 SingletonService package inflearn.spring_core.singleton; public class SingletonService { //1. static 영역에 객체를 딱 1개만 생성해둔다. // 자기자신을 내부에 딱 하나 가지고 있는 상황인 것. (); 이거까지 한 번에 입력됨 */ @DisplayName("스프링 없는 순수한 DI 컨테이너") @Test void pureContainer() { AppConfig appConfig = new AppConfig(); //1. 조회: 호출할 때마다 객체를 생성 MemberService memberService1 = appConfig.memberService(); //2. 조회: 호출할 때마다 객체를 생성 MemberS..
웹 애플리케이션과 싱글톤 # 스프링은 태생이 기업용 온라인 서비스 기술을 지원하기 위해 탄생했다. # 대부분의 스프링 애플리케이션은 웹 애플리케이션이다. 물론 웹이 아닌 애플리케이션 개발도 얼마든지 개발할 수 있다. # 웹 애플리케이션은 보통 여러 고객이 동시에 요청을 한다. 스프링 없는 순수한 DI 컨테이너 테스트 SingletonTest (test 패키지) package inflearn.spring_core.singleton; import inflearn.spring_core.config.AppConfig; import inflearn.spring_core.member.MemberService; import org.junit.jupiter.api.DisplayName; import org.junit...
스프링 빈 설정 메타 정보 - 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..