Spring/[inflearn]스프링 핵심 원리 - 기본편(35)
-
조회 빈이 2개 이상인 경우
-> @Autowired는 타입으로 조회한다. 따라서 ac.getBean(~.class)와 유사하게 동작한다. -> 타입으로 조회할 때 빈이 2개 이상이라면 문제가 발생한다. -> 문제 상황을 확인하기 위해 DiscountPolicy의 하위타입인 RateDiscountPolicy와 FixDiscountPolicy를 모두 스프링 빈으로 선언한다. - 두 클래스에 @Component를 붙여 테스트를 실행해본다. -> 실행하면 아래와 같은 에러로그가 나타난다. Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'practice.core.discount.DiscountPoli..
2023.08.01 -
롬복을 통한 코드 최적화
◎ @RequiredArgsConstructor -> 롬복 라이브러리에서 제공하는 기능으로 final이 붙은 필드를 모아 생성자를 자동으로 만들어준다. -> @RequiredArgsConstructor를 사용하면 final이 붙은 필드에 대한 생성자를 알아서 만들어주기 때문에 생성자 코드를 직접 작성할 필요가 없다. -> 또한 롬복에는 @Getter, @Setter는 GetXXX, SetXXX 메서드를 각각 만들어주는 기능으로 마찬가지로 해당 애너테이션을 붙이면 GetXXX, SetXXX를 직접 작성할 필요 없다. ☆ 참고 [인프런]스프링 핵심 원리 - 기본편
2023.08.01 -
생성자 주입을 사용하는 이유
◎ 불변 -> 대부분의 의존관계 주입은 애플리케이션 종료 시점까지 의존관계를 변경할 일이 없으며 애플리케이션 종료 전 까지 의존관계가 변하면 안된다. 만약 수정자 주입을 사용하면 setXXX메서드를 public으로 설정하게 되는데 실수로 변경할 수 있고, 변경이 있어서 안되는 메서드를 public으로 열어두는 것은 좋은 설계가 아니다. -> 생성자 주입은 객체 생성할 때 1번만 호출되기 때문에 이후에 호출될 일이 없다. 그래서 불변하게 설계할 수 있다. ◎ 누락 -> 수정자 의존관계 주입인 경우 public class OrderServiceImpl implements OrderService { private MemberRepository memberRepository; private DiscountPol..
2023.08.01 -
옵션 처리
-> 주입할 스프링 빈이 없이 동작해야 하는 경우가 있다. -> @Autowired를 사용하면 required 옵션 디폴트 값이 true로 지정되어 있어 자동 주입 대상이 없으면 오류가 발생한다. -> 이 문제를 해결하는 방법 3가지가 있다. 1. @Autowired(required = false)로 지정하면 자동 주입할 대상이 없으면 수정자 메서드 자체가 호출되지 않는다. 2. @Nullable을 사용하면 자동 주입 대상이 없으면 null이 입력된다. 3. Optional을 사용하면 자동 주입 대상이 없으면 Optional.empty가 입력된다. -> 결과 - Member는 스프링 빈이 아니기 떄문에 그냥 @Autowired만 사용할 경우 오류가 발생한다. ☆ 참고 [인프런]스프링 핵심 원리 - 기본편
2023.07.31 -
의존관계 자동 주입
◎ 의존관계 주입 방식 4가지 -> 의존관계 주입에는 4가지 방법이 있다. -> 생성자, 수정자(setter 주입), 필드, 일반 메서드 주입 ◎ 생성자 주입 -> 생성자를 통해서 의존관계를 주입하는 방식 -> 지금까지 사용해왔던 주입 방식이 생성자 주입 -> 생성자 호출 시점에 단 1번만 호출된다. -> 불변, 필수 의존관계에서 사용 -> 생성자가 하나만 있으면 @Autowired는 생략이 가능하다. ◎ 수정자 주입 -> setter라 불리는 필드의 값을 변경하는 수정자 메서드를 통해 의존관계를 주입하는 방식 -> setter로 필드의 값을 변경할 수 있기 때문에 선택, 변경 가능성이 있는 의존관계에서 사용 ◎ 필드 주입 -> 필드에 바로 주입하는 방식 -> 필드 주입은 외부에서 변경이 불가능해서 테스..
2023.07.18 -
컴포넌트 스캔 - 중복 등록과 충돌
◎ 스프링 빈 중복 등록 -> 컴포넌트 스캔에서 같은 빈 이름을 사용하는 상황은 2가지가 있다. 1. 자동 빈 등록 vs 자동 빈 등록 2. 수동 빈 등록 vs 자동 빈 등록 ◎ 자동 빈 등록 VS 자동 빈 등록 -> 컴포넌트 스캔을 통해 자동으로 스프링 빈이 등록되는데 이름이 같다면 스프링 오류(ConflictingBeanDefinitionException)를 발생시킨다. - OrderServiceImpl과 MemberServiceImpl 모두 service로 이름을 지정하고 테스트를 실행하면 오류가 발생한다. org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [practic..
2023.07.17