Spring
스프링 기본 - 자동, 수동의 올바른 실무 운영 기준
스프링 기본 - 자동, 수동의 올바른 실무 운영 기준
2022.06.06자동, 수동의 올바른 실무 운영 기준 편리한 자동 기능을 기본으로 사용하자 그러면 어떤 경우에 컴포넌트 스캔과 자동 주입을 사용하고, 어떤 경우에 설정 정보를 통해서 수동으로 빈을 등록하고, 의존관계도 수동으로 주입해야 할까? 결론부터 이야기하면, 스프링이 나오고 시간이 갈 수록 점점 자동을 선호하는 추세다. 스프링은 @Component 뿐만 아니라 @Controller, @Service, @Repository 처럼 계층에 맞추어 일반적인 애플리케이션 로직을 자동으로 스캔할 수 있도록 지원한다. 거기에 더해서 최근 스프링 부트는 컴포넌트 스캔을 기본으로 사용하고, 스프링 부트의 다양한 스프링 빈들도 조건이 맞으면 자동으로 등록하도록 설계했다. 설정 정보를 기반으로 애플리케이션을 구성하는 부분과 실제 동작..
스프링 기본 - 조회한 빈이 모두 필요할 때, List, Map
스프링 기본 - 조회한 빈이 모두 필요할 때, List, Map
2022.06.05조회한 빈이 모두 필요할 때, List, Map 의도적으로 정말 해당 타입의 스프링 빈이 다 필요한 경우도 있다. 예를 들어서 할인 서비스를 제공하는데, 클라이언트가 할인의 종류(rate, fix)를 선택할 수 있다고 가정해보자. 스프링을 사용하면 소위 말하는 전략 패턴을 매우 간단하게 구현할 수 있다. 코드로 바로 설명하겠다. 로직 분석 DiscountService는 Map으로 모든 DiscountPolicy를 주입받는다. 이때 fixDiscountPolicy, rateDiscountPolicy가 주입된다. discount() 메서드는 discountCode로 "fixDiscountPolicy" 가 넘어오면 map에서 fixDiscountPolicy 스프링 빈을 찾아서 실행한다. 물론 "rateDisc..
스프링 기본 - 애노테이션 직접 만들기
스프링 기본 - 애노테이션 직접 만들기
2022.06.05애노테이션 직접 만들기 @Qualifier("mainDiscountPolicy") 이렇게 문자를 적으면 컴파일시 타입 체크가 안된다. 다음과 같은 애노테이션을 만들어서 문제를 해결할 수 있다. 생성자 자동 주입 수정자 자동 주입 애노테이션에는 상속이라는 개념이 없다. 이렇게 여러 애노테이션을 모아서 사용하는 기능은 스프링이 지원해주는 기능이다. @Qulifier 뿐만 아니라 다른 애노테이션들도 함께 조합해서 사용할 수 있다. 단적으로 @Autowired도 재정의 할 수 있다. 물론 스프링이 제공하는 기능을 뚜렷한 목적 없이 무분별하게 재정의 하는 것은 유지보수에 더 혼란만 가중할 수 있다.
스프링 기본 - @Autowired 필드 명, @Qualifier, @Primary
스프링 기본 - @Autowired 필드 명, @Qualifier, @Primary
2022.06.03@Autowired 필드 명, @Qualifier, @Primary 해결 방법을 하나씩 알아보자. 조회 대상 빈이 2개 이상일 때 해결 방법 @Autowired 필드 명 매칭 @Qualifier → @Qualifier 끼리 매칭 → 빈 이름 매칭 @Primary 사용 @Autowired 필드 명 매칭 @Autowired 는 타입 매칭을 시도하고, 이때 여러 빈이 있으면 필드 이름, 파라미터 이름으로 빈 이름을 추가 매칭한다. 기존 코드 기존코드가 만약에 필드주입이면, DiscountPolicy 는 빈이 Fix도 있고 Rate도 있어서 같은타입이 2개가 있는 상태이다. 이것을 어떻게 해결 할 수 있냐면, 필드 명(파라미터 명)을 빈 이름으로 변경 이렇게 필드명을 바꿔서 필드명 or 파라미터 명에 매칭이 되..
스프링 기본 - 조회 빈이 2개 이상 - 문제
스프링 기본 - 조회 빈이 2개 이상 - 문제
2022.06.03조회 빈이 2개 이상 - 문제 @Autowired는 타입(Type)으로 조회한다. 타입으로 조회하기 때문에, 마치 다음 코드와 유사하게 동작한다. (실제로는 더 많은 기능을 제공한다.) ac.getBean(DiscountPolicy.class) 스프링 빈 조회에서 학습했듯이 타입으로 조회하면 선택된 빈이 2개 이상일 때 문제가 발생한다. DiscountPolicy의 하위 타입인 FixDiscountPolicy, RateDiscountPolicy 둘다 스프링 빈으로 선언해보자. 그리고나서 test를 돌려보면, NoUniqueBeanDefinitionException 오류가 발생한다 오류메시지가 친절하게도 하나의 빈을 기대했는데 fixDiscountPolicy, rateDiscountPolicy 2개가 발견..
스프링 기본 - 롬복과 최신 트랜드
스프링 기본 - 롬복과 최신 트랜드
2022.06.02롬복과 최신 트랜드 막상 개발을 해보면, 대부분이 다 불변이고, 그래서 다음과 같이 생성자에 final 키워드를 사용하게 된다. 그런데 생성자도 만들어야 하고, 주입 받은 값을 대입하는 코드도 만들어야 하고... 필드 주입처럼 좀 편리하게 사용하는 방법은 없을까? 다음 기본 코드를 최적화해보자. 기본 코드 생성자가 딱 1개만 있으면 @Autowired를 생략할 수 있다. 이제 롬복을 적용해보자. 롬복 라이브러리 적용 방법은 아래에 적어두었다. 롬복 라이브러리가 제공하는 @RequiredArgsConstructor 기능을 사용하면 final이 붙은 필드를 모아서 생성자를 자동으로 만들어준다. (다음 코드에는 보이지 않지만 실제 호출 가능하다.) 최종 결과는 다음과 같다. 정말 간결하지 않은가!! 최종 결과..