본문 바로가기

Learning-log/Spring & JPA55

(스프링 핵심 원리 - 기본편) 7-(7) 애노테이션 직접 만들기, (8) 조회한 빈이 모드 필요할 때, List, Map, (9) 자동, 수동의 올바른 실무 운영 기준 - 애노테이션 직접 만들기 @Qualifier("mainDiscountPolicy") 이렇게 문자를 적으면 컴파일 시 타입 체크가 안됨. 이런 경우 애노테이션을 직접 만들어서 해결 가능 애노테이션은 상속이라는 개념이 없음 여러 애노테이션을 모아서 사용하는 기능은 스프링이 지원하는 기능인 것. Autowired도 재정의 가능. 하지만 스프링이 제공하는 기능을 뚜렷한 목적 없이 무분별하게 재정의 하면 유지 보수에 혼란을 줄 수 있으므로 삼가자. - 조회한 빈이 모드 필요할 때, List, Map 예제 할인 서비스 제공 시, 클라이언트가 할인의 종류를 선택할 수 있다고 가정 스프링을 사용하면 전략 패턴 간단히 구현 가능 public class AllBeanTest { @Test void findAllBean(.. 2023. 4. 9.
(스프링 핵심 원리 - 기본편) 7-(4) 롬복과 최신 트랜드, (5)조회 빈이 2개 이상 - 문제, (6)@Autowired필드 명, @Qualifier, @Primary - 롬복과 최신 트랜드 개발의 대부분은 다 불변, 그래서 생성자에 final을 사용하게 됨 그런데 생성자도 만들어야하고 주입 받은 값을 대입하는 코드도 만들어야 하는데 필드 주입처럼 편하게 사용하는 방법은? 기존의 OrderServiceImpl코드를 최적화해보자. 최적화 전 @Component public class OrderServiceImpl implements OrderService{ private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy.. 2023. 4. 8.
(스프링 핵심 원리 - 기본편) 7-(2) 옵션 처리, (3)생성자 주입을 선택해라! - 옵션 처리 주입할 스프링 빈이 없어도 동작해야 할 때 @Autowired만 사용하면 required 옵션의 기본값이 true이므로 오류 발생 자동 주입 대상을 옵션으로 처리하는 방법 @Autowired(required = false) : 자동 주입할 대상이 없으면 수정자 메서드 자체가 호출 안됨(실행 안하고 지나감) @Nullable : 자동 주할 대상이 없으면 null 입력됨 Optional : 자동 주입할 대상이 없으면 Optional.empty가 입력됨 아래는 member가 스프링 빈이 아니지만 실행에 성공함. - 생성자 주입을 선택해라! 예전에는 수정자 주입과 필드 주입을 많이 사용했지만, 요즘은 생성자 주입 권장 이유는? 불변하기 때문 대부분 의존관계 주입은 한번 일어나면 애플리케이션 종료까.. 2023. 4. 7.
(스프링 핵심 원리 - 기본편) 7-(1) 다양한 의존관계 주입 방법 - 다양한 의존관계 주입 방법 스프링은 스프링 빈을 등록하는 단계와 의존관계 주입하는 단계로 나뉨. 생성자 주입 생성자를 통해 의존관계 주입 지금까지 해오던 것. 특징 생성자 호출 시점에 딱 1번만 호출 되는 것이 보장됨 불변, 필수 의존관계에 사용 생성자가 딱 1개만 있으면 @Autowired 생략해도 자동 주입(스프링 빈에만 해당) 수정자 주입(setter 주입) setter라 불리는 필드의 값을 변경하는 수정자 메서드를 통해 의존관계 주입 특징 선택, 변경 가능성이 있는 의존 관계에 사용 자바빈 프로퍼티 규약의 수정자 메서드 방식을 사용 만약 수정자 내의 주입하려는 객체가 자바빈에 등록이 안되어있어도 사용 가능 @Autowired 는 기본적으로 주입할 대상이 없으면 오류 발생. 이를 주입할 대상이 .. 2023. 4. 6.
(스프링 핵심 원리 - 기본편) 6-(2)탐색 위치와 기본 스캔 대상, (3)필터 ,(4) 중복 등록과 충돌 - 탐색 위치와 기본 스캔 대상 모든 자바 클래스를 다 컴포넌트 스캔하면 오래걸리므로 시작위치를 지정하는 방법 사용 backPackages : 탐색할 패키지의 시작위치 지정해서 그 패키지와 하위 패키지까지 모두 탐색. basePackageClasses : 지정한 클래스의 패키지를 탐색 시작 위로 지정 지정하지 않으면 @ComponentScan이 붙은 설정 정보 클래스의 패키지가 시작 위치로 지정 권장 방법 패키지를 지정하지 않고 설정 정보 클래스의 위치를 프로젝트 최상단에 두는 방법 스프링 부트도 이 방법을 제공 컴포넌트 스캔 기본 대상(괄호 : 컴포넌트 스캔 외의 기능) @Component 뿐만 아니라 아래 목록도 대상에 포함 @Controller : 스프링 MVC컨트롤러에서 사용(스프링 mvc 컨트롤.. 2023. 4. 6.
(스프링 핵심 원리 - 기본편) 6-(1)@컴포넌트 스캔과 의존관계 자동 주입 시작하기 - 컴포넌트 스캔과 의존관계 자동주입 시작하기 스프링 빈을 등록할 때 지금까지는 자바 코드의 @Bean이나 XML의 을 통해 직접 등록할 스프링 빈을 나열하는 방식 사용함. 하지만 이렇게 등록해야 할 스프링 빈이 수십, 수백개가 된다면 귀찮을 뿐만 아니라 누락 문제도 발생 그래서 스프링에서는 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔 기능 제공함 컴포넌트 스캔 사용법 : @ComponentScan 붙이기 @Configuration도 컴포넌트 스캔의 대상이 된 이유도 @Configuration의 소스코드를 열어보면 @Component 애노테이션이 붙어있기 때문 이전에 Config 사용했을 때는 @Bean으로 직접 설정 정보 작성, 의존관계도 직접 명시 Component를 이용하면 이런.. 2023. 4. 4.