스프링의 다양한 의존관계 주입 스프링의 의존관계 주입은 아래 네 가지 방법이 있다. 그 중에서 주로 사용되는 것은 생성자 주입, 수정자 주입이다. 생성자 주입 수정자 주입(Setter 주입) 필드 주입 일반 메서드 주입 스프링 DI : 생성자 주입 생성자 주입은 생성자를 호출할 때 의존관계 주입까지 된다. 다른 의존관계 주입은 빈 라이프 사이클에 따라 의존관계 주입 단계에서 일괄적으로 이루어진다. @ComponentScan을 하면 @Component가 붙은 OrderserviceImpl.class가 스프링 빈에 등록된다. 스프링 빈 등록되면 생성자 호출이 된다. 생성자 호출 시, @Autowired가 있는 것을 스프링이 확인한다. 이 때 스프링 컨테이너의 빈 저장소에서 MemberRepository, D..
들어가기 전 이 글은 인프런 김영한님의 강의를 복습하며 작성한 글입니다. 스프링 컨테이너와 ComponentScan 앞서 스프링 컨테이너에서는 @Configuration + @Bean 조합을 통해서 스프링 컨테이너에 등록할 빈을 지정했다. 이것은 스프링 빈을 등록하는 설정 파일을 스프링 빈으로 등록하고, 그 설정파일 빈을 바탕으로 필요한 스프링 빈으로 추가로 등록하는 작업을 한 것이다. 등록해야 할 스프링 빈이 얼마없다면 이것으로 충분하지만, 등록할 빈이 수백 개가 넘어간다면 시간 낭비가 될 수 있고, 등록해야 할 스프링 빈이 누락되는 문제가 발생할 수 있다. 이런 것들을 보완하기 위해 'Component Scan'이라는 기능을 스프링은 제공한다. Component Scan은 간편하게 스프링 빈을 등록할..
싱글톤 컨테이너를 조금 더 들여다보고 어떻게 동작되는지를 좀 더 알아보면 좋을 것 같다. 싱글톤 컨테이너, 싱글톤이 깨지는거 아냐? 우선 아래코드를 실행해본다고 가정하자. 아래 코드에서 OrderService를 부를 때, memberRepository()로 이동해, new MemoryMemberRepository()가 실행된다. 아래 코드에서 MemberService를 부를 때, memberRepository()로 이동 해, new MemoryMemberRepository()가 실행된다. 두 코드가 다 실행되면, MemoryMemberRepository가 두번 실행되면 싱글톤 패턴이 깨지는 것처럼 보인다. 진짜 깨질까? @Configuration public class AppConfig { @Bean p..
이 글은 인프런 김영한님의 강의를 복습하며 작성한 글입니다. 스프링 컨테이너 : Singleton Container 스프링 컨테이너는 100% 싱글톤 컨테이너는 아니지만, 주로 싱글톤 컨테이너로 사용된다고 한다. 이 때 100% 싱글톤 컨테이너가 아니라는 말은 어떤 Bean Scope를 사용하느냐에 따라 싱글톤 컨테이너가 아닐 수 있다는 것을 의미한다. 예를 들어 ProtoType Scope / Request Scope로 만들어진 Bean은 요청이 올 때마다 생성되기 때문에 싱글톤이 아니다. Singleton with Web Application 웹 어플리케이션은 보통 여러 고객이 동시에 많은 요청을 한다. 롤로 예를 들어보면 한번에 수백 ~ 수천개 이상의 큐가 잡힐 것이다. 고객이 한번에 수백 ~ 수천..
스프링 컨테이너의 생성 설정 정보를 저장한 AppConfig Class가 있다고 가정했을 때, 이 클래스로 스프링 컨테이너를 생성하는 명령어는 아래 코드다. ApplicationContext를 스프링 컨테이너라하고, ApplcationContext는 Interface다. ApplicationContext 인터페이스에 자바 형식으로 구현한 구현체가 AnnotationConfigApplicationContext다. 그렇다면 아래 명령어를 치게 되었을 때, 스프링 컨테이너는 어떤 순서로 만들어지게 될까? ApplicationContext ac = new AnnotaionConfigApplicationContext(AppConfig.class); 1. 먼저 위 그림처럼 스프링 컨테이너와 스프링 빈 저장소가 하나..