일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- resultMap
- db
- spring
- springboot
- DIP
- 싱글톤
- jdbc
- 스프링
- SQL
- assertThat
- java
- 스프링부트
- 스프링 부트 입문
- 스프링 부트
- sqld
- 스프링 컨테이너
- 스프링 빈
- 스프링 부트 기본
- thymeleaf
- @Configuration
- mybatis
- 필드 주입
- JPA
- Effective Java
- Javascript
- assertThrows
- 스프링 프레임워크
- 생성자 주입
- DI
- kafka
- Today
- Total
목록Framework/Spring Framework (56)
선 조치 후 분석
어노테이션(@) 만드는 방법 + 스프링이 어노테이션을 읽어오는 원리 어노테이션 직접 만들기 @Qualifier("mainDiscountPolicy") 이렇게 문자를 적으면 컴파일 시 타입 체크가 안된다. 예를 들어, "mainnDiscountPolicy"으로 써도 동작 은하지만, 오류가 발생한다. 그래서 다음과 같은 어노테이션을 만들어서 문제를 해결할 수 있다. 1. 필요한 어노테이션들을 얻어오자. Qualifier의 어노테이션들을 그대로 따와서 적용해주자. @Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE}) @Retention(Retention..
@Autowired, @Qualifier, @Primary + 조회 대상 빈이 2개 이상일 때, 해결방법 + @Qualifier VS @Primary 차이점 + @Qualifier VS @Primary 우선순위 앞서 배웠던 내용에서, 같은 타입(Type)의 빈이 있다면 오류가 발생하는 경우가 생긴다. 어떻게 해결해야 하는지 하나씩 알아보자. 조회 대상 빈이 2개 이상일 때, 해결방법 1. @Autowired 필드 명 매칭 2. @Qualifier -> @Qualifier끼리 매칭 -> 빈 이름 매칭 3. @Primary 사용 1. @Autowired 필드 명 매칭 (타입 -> 필드 -> 파라미터) @Autowired는 타입 매칭을 시도하고, 이때 여러 빈이 있으면, 필드 이름, 파라미터 이름으로 빈 이름..
조회 빈이 2개 이상일 때 발생되는 문제 + NoUniqueBeanDefinitionException @Autowired는 타입(Type)으로 조회한다. @Autowired public OrderServiceImpl(MemberRepository memberRepository,DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = discountPolicy; } 타입으로 조회하기 때문에, 마치 다음 코드와 유사하게 동작한다. ac.getBean(DiscountPolicy.class) 스프링 빈 조회에서 학습했듯이 타입으로 조회하면 선택된 빈이 2개 이상일 때 문제가 발생한다. Discou..
생성자 주입을 선택해라 + 생성자 주입 vs 수정자 주입 차이 + 생성자 주입의 장점 + final 키워드 생성자 주입을 선택해라! 과거에는 수정자 주입과 필드 주입을 많이 사용했지만, 최근에는 스프링을 포함한 DI 프레임워크 대부분이 생성자 주입을 권장한다, 그 이유는 다음과 같다. 불변 대부분의 의존관계 주입은 한번 일어나면 애플리케이션 종료 시점까지 의존관계를 변경할 일이 없다. 오히려 대부분의 의존관계는 애플리케이션 종료 전까지 변하면 안 된다. (불변해야 한다.) 수정자 주입을 사용하면, setXxx 메서드를 public으로 열어두어야 한다. 누군가 실수로 변경할 수도 있고, 변경하면 안 되는 메서드를 열어두는 것은 좋은 설계 방법이 아니다. 생성자 주입은 객체를 생성할 딱 1번만 호출되므로 이..
옵션 처리, Autowired 옵션 종류, @Autowired(required=false), @Nullable, Optional 옵션 처리 주입할 스프링 빈이 없어도 동작해야 할 때가 있다. 그런데 @Autowired만 사용하면 required 옵션의 기본값이 true로 되어있어서 자동 주입 대상이 없으면 오류가 발생한다. 자동 주입 대상을 옵션으로 처리하는 방법은 다음과 같다. @Autowired(required=false) : 자동 주입할 대상이 없으면 수정자 메서드 자체가 호출 안됨 org.springframework.lang.@Nullable : 자동 주입할 대상이 없으면 null이 입력된다. Optional : 자동 주입할 대상이 없으면 Optional.empty가 입력된다. Optional는 ..
다양한 의존관계 주입 방법 (생성자 주입, 수정자 주입(Setter 주입), 필드 주입, 일반 메서드 주입) + 자바 빈 프로퍼티 규칙(규약) + @Autowired 종류 의존관계 주입은 크게 4가지 방법이 있다. 1. 생성자 주입 2. 수정자 주입 (setter 주입) 3. 필드 주입 4. 일반 메서드 주입 생성자 주입 : 이름 그대로 생성자를 통해서 의존 관계를 주입받는 방법이다. 지금까지 우리가 진행했던 방 빕이 바로 생성자 주입이다. 특징 생성자 호출 시점에 딱 1번만 호출되는 것이 보장된다. 불변, 필수 의존관계에 사용 아래 코드를 보면, 생성자에 @Autowired가 붙어있다. @Component에 의해 Bean에 등록이 될 때, 생성자가 호출이 된다. 그럼 자동적으로 생성자에 붙은 @Auto..