
싱글톤 컨테이너 스프링 컨테이너는 싱글톤 패턴의 문제점을 해결하면서, 객체 인스턴스를 싱글톤(1개만 생성)으로 관리한다. 지금까지 여기서 다뤄왔던 스프링 빈이 바로 싱글톤으로 관리되는 빈이다. 싱글톤 컨테이너 스프링 컨테이너를 사용하는 테스트 코드 SingletonTest - 테스트 추가 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.jupiter.api.Test; import org.springframew..
스프링 입문 핵심 원리 테스트 코드 공부하다가 두 개를 각각 써봤는데 다 통과해서, 한 번 찾아보았다. 1) isNotSameAs 이 메서드는 두 개의 객체가 물리적으로 동일한 객체가 아님을 확인한다. 즉, 두 객체가 메모리 상에서 서로 다른 인스턴스를 가리키는 경우에만 성공한다. 객체의 참조(메모리 주소)를 비교하므로, 두 객체가 다른 인스턴스라면 true를 반환하고, 동일한 인스턴스라면 false를 반환. == 연산자와 유사한 기능을 수행 2) isNotEqualTo 이 메서드는 두 객체가 논리적으로 다른 값을 나타내는지 확인합니다 *논리적 동등성 객체의 equals 메서드를 사용하여 두 객체 간의 동등성을 확인 두 객체가 내용적으로 다르면 true를 반환하고, 내용이 동일하면 false를 반환 따라..

싱글톤 패턴 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("부모 타입으로..