본문 바로가기

전체 글

(185)
[Spring Boot] Bean factory와 ApplicationContext (중요) 1- BeanFactory 스프링 컨테이너의 최상위 인터페이스임 스프링 빈을 관리하고 조회하는 역할을 담당함 getBean( ) 제공 지금까지 우리가 사용했던 대부분의 기능은 BeanFactory가 제공하는 기능임 2- ApplicationContext BeanFactory의 기능을 모두 상속 받아 제공함 빈을 관리하고 검색하는 기능을 BeanFactory가 제공하는데 둘의 차이는? 애플리케이션 개발시 빈을 관리, 조회 기능은 물론이고 수 많은 부가기능이 필요함 - BeanFactory 외에도 ApplicationContext는 다양한 인터페이스를 상속 받음 - MessageSource, EnvironmentCapable, ApplicationEventPublisher, ResourceLoader, ....
[Spring Boot] 스프링 빈 조회 (4) 상속 관계 1- 스프링 빈 조회: 상속관계 부모 타입으로 조회하면 자식 타입도 함께 조회함 [ 대원칙: 자식들은 다 끌려온다고 보면 됨 ] 그래서 모든 자바 객체의 최고 부모인 Object 타입으로 조회하면 모든 스프링 빈 조회 2- 테스트 코드 package hello.core.beanfind; import hello.core.AppConfig; import hello.core.discount.DiscountPolicy; import hello.core.discount.FixDiscountPolicy; import hello.core.discount.RateDiscountPolicy; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.T..
[Spring Boot] 스프링 빈 조회 (3) 동일한 타입이 둘 이상 1- 스프링 빈 조회 타입으로 조회시 같은 타입의 스프링 빈이 둘 이상이면 오류가 발생함. --> 이때는 빈 이름 지정 필요. @Bean (name = "beanName" ) annotcationConfigApplicationContext.getBeansOfType( ) --> 이를 사용해 해당 타입의 모든 빈 조회 가능 2- 타입으로 조회하는 경우 - 테스트 코드 예시 (1) 테스트시 생성되는 ApplicationContext를 달리하기 위해 해당 코드 내에 Config 클래스를 만듦 (2) 테스트 코드로 실행한 결과 동일 타입의 Bean이 중복으로 조회되어 NoUniueBeanDefinitionException 에러 발생 [ 수정 ] @Test @DisplayName("타입으로 조회시 같은 타입이 둘..
[Spring Boot] 스프링 컨테이너와 스프링 빈 (2) 컨테이너에 등록된 모든 빈 조회 1- 테스트 코드 활용 package hello.core.beanfind; import hello.core.AppConfig; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class ApplicationContextInfoTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); @Test @DisplayName("모든 빈 출력하기..
[Spring Boot] 스프링 컨테이너와 스프링 빈 (1) 생성 과정 1- 스프링 컨테이너가 생성되는 과정 ApplicationContext = 스프링 컨테이너 = 인터페이스 스프링 컨테이너는 XML 기반으로 만들 수 있고, 애노테이션 기반의 자바 설정 클래스로 만들 수 있음 직전에 AppConfig를 사용한 방식이 애노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만든 것 요즘은 XML 형식 보다는 애노테이션 기반으로 스프링 컨테이너를 만듦 - 스프링부트 자체가 애노테이션 기반에 작동이 편리하게 되어있기 때문 자바 설정 클래스를 기반으로 스프링 컨테이너(ApplicationContext) 만들기 new AnnotationConfigApplicationContext( AppConfig.class ); AnnotationConfigApplicationContext는 A..
[Spring Boot] 스프링 컨테이너와 스프링 빈 (0) - 이전 강의 중요 포인트 정리 1- 이전까지 강의 주요 포인트 정리 객체지향 - SOLID 원칙 --> OCP와 DIP를 지키지 못하는 경우가 많음. --> 이때 개발자가 직접 AppConfig로 DI를 주어 OCP와 DIP를 해소해주는 방법이 존재함 - AppConfig 활용 --> 구현 객체를 생성하고 연결을 책임지는 별도의 클래스 --> 즉, 어플리케이션 동작에 필요한 실제 구현 책체 생성하고, 참조 값을 리턴함 스프링 핵심 원리 - 제어의 역전[ IoC : Inversion of Controll ] --> 말 그대로 제어의 역전으로, 개발자가 무언가를 호출하는 것이 아니라 프레임워크가 대신 호출하는 것을 말함 --> 스프링에 극한된 개념이 아니라 여러 곳에서 사용됨 - 의존관계 주입[ DI: Dependency Injectio..
[Spring Boot] 스프링 부트로 전환하기 1- 어노테이션 AppConfig 파일 @Configuration - 설정 정보 (구성 정보) 파일이라는 것을 명시함 - 스프링에서는 설정 정보 파일에 ' @Configuration '이 선언되어야 함 - Import는 ' org.springframework.context.annotation.Configuration ' @Bean - @Bean을 선언하면 Spring Container에 등록됨 2- 스프링 설정하기 ApplicationContext 를 선언함 - 스프링은 ApplicationContext라는 곳에서 시작됨 - 이는 스프링 컨테이너임 - 또한 얘가 @Bean이 되어 있던 애들을 모두 관리해줌 - 생성자에 AppConfig.class 를 넘겨줌으로 AppConfig에 있는 환경 설정 정보를 ..
[Spring Boot] IoC, DI, 컨테이너 1- 제어의 역전 : IoC ( Inversion of Control) 말 그대로 제어의 역전 내가 무언가를 호출하는게 아니라 프레임워크가 대신 호출하는 것을 말함 스프링에만 극한된 개념이 아니라 여러 곳에서 나옴 AppConfig 등장 이후 구현 객체는 자신의 로직을 실행하는 역할만 담당함 제어 흐름 자체를 AppConfig가 가져감 코드 예시 @Override public Order createOrder(Long memberId, String itemName, int itemPrice) { // IoC에 의하면 OrderServiceImpl은 memberRepository에 대한 제어권이 없음 Member member = memberRepository.findById(memberId); int dis..