본문 바로가기

전체 글46

Spring 의존관계 자동 주입 다양한 의존관계 주입 방법 의존관계 주입은 크게 다음과 같이 4가지가 있다. 생성자 주입 수정자 주입 (Setter 주입) 필드 주입 일반 메서드 주입 생성자 주입 이름 그대로 생성자를 통해서 의존관계를 주입 받는 방식이다. 생성자 호출 시점에 딱 1번만 호출되는 것이 보장된다. 불변, 필수 의존 관계에 사용된다. 참고 ✓ 생성자가 딱 1개만 있으면 @Autowired 를 생략해도 자동 주입이 된다. (스프링 빈에만 해당) ✓ 생성자에선 null 값을 허용하지 않기 때문에 불변 및 필수 관계에 있어 사용한다. (자바 컨벤션) ✓ 생성자 주입은 해당 빈을 등록(생성)하는 단계에서 생성자가 호출되기에 해당 과정에서 의존 관계 주입이 된다. (자바 코드 생성자 호출) 수정자 주입 Setter 라 불리는 필드의.. 2020. 12. 21.
Spring Component Scan Component Scan 과 의존관계 자동 주입 현재까지 알아본(Spring Container, Bean 편) Spring Bean 을 등록할 때는 자바 코드의 @Bean 이나 XML 의 등을 통해서 설정 정보에 직접 등록할 Spring Bean 을 나열했다. 예제 속 등록해야할 빈의 개수는 몇개 되지 않아 문제가 없었지만, 실제 등록해야할 빈의 개수가 수십, 수백개가 되면 등록하기 굉장히 불편하고, 설정 정보도 커지고, 누락하는 문제도 발생한다. 따라서, Spring 은 설정 정보가 없어도 자동으로 Spring Bean 을 등록하는 Component Scan 이라는 기능을 제공한다. 또한, 각 Component 에 필요한 의존관계도 자동으로 주입해주는 @Autowired 기능도 제공한다. Compon.. 2020. 12. 13.
@Configuration 과 Singleton 위 코드는 설정 정보를 자바 코드로 작성한 AppConfig 클래스 이다 memberService 빈을 만드는 코드를 보면 'memberService()' 를 호출한다. 해당 메서드를 호출하면 'new MemoryMemberRepository()' 를 호출한다. orderService 빈을 만든느 코드도 동일하게 'memberRepository()' 를 호출한다. 해당 메서드 역시 호출 시에 'new MemoryMemberRepository()' 를 호출한다. 결과적으로 각각 다른 2개의 'MemoryMemberRepository' 가 생성되면서 싱글톤 보장이 깨지는 것 처럼 보인다. 그렇다면 스프링 컨테이너는 이 문제를 어떻게 해결할까? AppConfig 의 자바 코드를 보면 분명히 각각 2번의 호출에.. 2020. 12. 7.