본문 바로가기

Spring

(77)
Spring- 컴포넌트 스캔과 자동 의존관계 주입 컴포넌트 스캔 이전에는 AppConfig와 같이 DI 컨테이너를 만들고 그안에 @Bean 어노테이션을 사용해서 메소드(객체 반환)를 등록하였다. 하지만 만일 등록할 빈이 너무 많다면 일일히 하나하나 빈을 등록하는 일은 여간 어려운 일이 아닐 것이다. 그렇기에 좀더 빈 등록을 편하게 하기위해서 컴포넌트 스캔을 사용한다. - 예시 -기존방식 기존 MemberServiceImpl.java package hello.core.member; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; public class MemberServiceImpl implements M..
Spring- @configuration과 싱글톤 들어가기에 앞서... 스프링은 싱글톤을 최대한 보장하고자 한다. 그렇다면 그 사실을 염두하고 아래의 코드를 보자. AppConfig.java package hello.core; @Configuration public class AppConfig { @Bean public MemberService memberService(){ System.out.println("call AppConfig.memberService"); return new MemberServiceImpl(memberRepository()); //new MemoryMemberRepository() } @Bean public MemberRepository memberRepository() { System.out.println("call AppC..
Spring- 싱글톤 싱글톤 객체를 필요시마다 새로이 생성하는 것이 아니라 하나의 객체를 계속 공유해 사용하는 것이다. 싱글톤의 구현 package hello.core.singleton; public class SingletonService { private static final SingletonService instance = new SingletonService(); private SingletonService(){} // private 생성자로 객체가 하나만 생성되도록 함 (외부에서 new 방지) public static SingletonService getInstance(){ // instance를 꺼내기 위한 유일한 방법 return instance; } public void logic(){ System.out.p..
Spring- 스프링 빈 메타 정보 설정(BeanDefinition) BeanDefinition 스프링 빈을 등록시에는 자바 코드에 @Bean 어노테이션을 통해서 빈 등록도 가능하지만 그 외에 xml을 이용하는 방식등, 여러 가지 방식을 통해서 스프링 빈을 등록하는 것이 가능하다. 이는 스프링 컨테이너가 자바코드, xml 파일을 읽는 것이 아니라 BeanDefinition만 읽기 때문에 가능하다. 또한 자바 코드와 xml은 BeanDefinition으로 추상화된다. 여기서 BeanDefinition을 "빈 설정 메타정보"라고 한다. 즉, "자바 코드, xml, etc -> BeanDefinition로 추상화 -> 스프링 컨테이너가 BeanDefinition 읽어들임"의 과정이 있다. 여기서 스프링 컨테이너는 다른 건 신경 쓸 필요없이 BeanDefinition만 보면 되기..
Spring- BeanFactory와 ApplicationContext BeanFactory 스프링 컨테이너의 최상위 인테페이스로, 스프링 빈을 관리하고 조회하는 역할을 담당한다. getBean() 메소드가 여기에 속해있다. ApplicationContext BeanFactory를 상속받아 부가 기능을 제공하는 인터페이스이다. 메시지 소스를 활용한 국제화 기능 한국 ip로 들어오면 한글로, 미국 ip로 들어오면 영어로 출력 환경변수 로컬, 개발, 운영등을 구분해서 처리 애플리케이션 이벤트 이벤트를 발행하고 구독하는 모델을 편리하게 지원 편리한 리소스 조회 파일, 클래스 패스, 외부 등에서 리소스를 편리하게 조회 BeanFactory를 단독으로 사용하는 경우는 거의 없고 주로 ApplicationContext를 사용한다. 또한 이 둘을 스프링 컨테이너라고 한다.
Spring- 빈 관련 내용 정리 모든 빈 출력하기 예제) 테스트 코드 package hello.core.beanFind; import hello.core.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; public class ApplicationContextInfoTest { AnnotationConfigApplicationContext ac = new Annotation..
Spring- 스프링 컨테이너로 등록하기(2) package hello.core; import hello.core.member.Grade; import hello.core.member.Member; import hello.core.member.MemberService; import hello.core.member.MemberServiceImpl; import hello.core.order.Order; import hello.core.order.OrderService; import hello.core.order.OrderServiceImpl; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigA..
Spring- 스프링 컨테이너로 등록하기(1) 스프링 컨테이너로 등록하기 @Configuration 설정 클래스를 스프링 빈으로 등록하기 위해서는 @Configuraition 어노테이션을 붙여준다. 이번에도 AppConfig 클래스를 예시로 들겠다. AppConfig 클래스(DI 컨테이너) package hello.core; @Configuration // @Configuration : 설정 정보 public class AppConfig { ..... } @Bean 사실 AppConfig는 다음과 같이 구현되어 있다. AppConfig 클래스(DI 컨테이너) 내부 모습 package hello.core; import hello.core.discount.DiscountPolicy; import hello.core.discount.FixDiscountP..