분류 전체보기
-
(스프링 기본) 25 - 의존 관계 등록 올바른 실무 기준 (자동, 수동)개발/Spring 2024. 10. 28. 16:46
기본으로는 ComponentScan 자동 등록을 사용하자!! (추천) @Controller, @Service, @Repository 처럼 계층 맞추어일반적인 애플리케이션 로직 자동으로 스캔할 수 있도록 스프링이 지원한다. 더불어 현재 스프링 부트의 경우, 컴포넌트 스캔을 기본으로 사용하고,다양한 스프링 빈들도 조건이 맞으면 자동 등록 되도록 설계되었다. 자동으로 빈 등록을 사용해도 OCP, DIP 지킬 수 있다. ■ 수동 빈 등록은 언제 하는가? 애플리케이션은 크게 업무로직과 기술 지원 로직으로 나뉜다. 1. 업무로직 빈 (자동 등록 추천)웹을 지원하는 컨트롤러, 핵심 비즈니스 로직 있는 서비스, 데이터 계층 로직 처리하는 리포지토리 등보통 비즈니스 요구사항 개발할 때 추가되거나 변경된다. 2. 기..
-
(스프링 기본) 24 - 조회된 빈이 모두 필요할 때 (List, Map)개발/Spring 2024. 10. 28. 16:22
해당 빈이 모두 필요할 경우 List 또는 Map 을 활용하면 된다. public class AllBeanTest { @Test void findAllBean() { ApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class, DiscountService.class); } static class DiscountService { private final Map policyMap; private final List policies; @Autowired public DiscountService(Map policyMap, List polic..
-
(스프링 기본) 23 - 어노테이션 만들기개발/Spring 2024. 10. 28. 15:18
package hello.core.annotation;import org.springframework.beans.factory.annotation.Qualifier;import java.lang.annotation.*;@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE})@Retention(RetentionPolicy.RUNTIME)@Inherited@Documented@Qualifier("mainDiscountPolicy")public @interface MainDiscountPolicy {} 다음과 같이 @Qualifier에 있는 에노테이션을 가..
-
(스프링 기본) 22 - 조회된 빈이 2개 이상 문제 (@Qualifier, @Primary)개발/Spring 2024. 10. 28. 14:57
■ 조회된 빈이 2개 이상 발견 되면 생기는 문제 (UnsatisfiedDependencyException)@Componentpublic class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; this.di..
-
(스프링 기본) 21 - 롬복 사용하기 (@Getter, @Setter + 생성자 주입 깔끔하게 넣기)개발/Spring 2024. 10. 28. 13:34
settings -> plugins -> lombok 설치 annotation processors -> enable annotation processing 체크 -> ok @Getter@Setterpublic class HellloLombok { private String name; private int age; public static void main(String[] args) { HellloLombok hellloLombok = new HellloLombok(); hellloLombok.setName("hjsong96"); String name = hellloLombok.getName(); System.out.println("nam..
-
(스프링 기본) 20 - 생성자 주입 선택해야 하는 이유개발/Spring 2024. 10. 28. 11:21
1. 불변 - 의존관계 주입은 한 번 일어나면 애플리케이션 종료 시점까지 변경할 일이 거의 없다.(오히려 변하면 안된다 = 불변)- 수정자 주입 사용하면 setXxx 메서드 public 으로 열어두고, 누군가 변경할 수 있다. - 생성자 주입은 객체 생성 시 딱 1번만 호출되고 이후에는 호출되는 일 없어 불변 설계 가능하다. 2. 누락- 프레임워크 없이 순수한 자바 코드를 단위 테스트 하는 경우 class OrderServiceImplTest { @Test void createOrder() { MemoryMemberRepository memberRepository = new MemoryMemberRepository(); memberRepository.save(new M..
-
(스프링 기본) 19 - 옵션 처리개발/Spring 2024. 10. 28. 10:46
스프링 빈이 없어도 동작해야 할 때가 있다. @Autowired 만 사용하면 required 옵션 기본값이 true 여서자동 주입 대상이 없으면 오류가 발생한다. 즉 스프링 컨테이너에 빈이 등록되지 않고 자동 주입 대상이 없어도동작해야 할 때 아래와 같이 처리하면 된다. 1. @Autowired(required=false) : 자동 주입 대상이 없으면 수정자 메서드(setter) 자체 호출 안됨2. org.springframework.lang.@Nullable : 자동 주입할 대상이 없으면 null 이 입력3. Optional : 자동 주입할 대상 없으면 Optional.empty 입력※ 자바 8의 Optional 로, 상태 있을 수도 있고 없을 수도 있다는 상태를 Optional 로 감싼 것이다. ..
-
(스프링 기본) 18 - 다양한 의존관계 주입 방법 (생성자, 수정자, 필드, 일반 메서드)개발/Spring 2024. 10. 28. 09:33
■ 의존관계 주입 4가지1. 생성자 주입2. 수정자 주입(setter 주입)3. 필드 주입4. 일반 메서드 주입 ■ 생성자 주입- 생성자를 통해 의존 관계 주입하는 방법- 생성자 호출 시점 딱 1번만 호출되는 것이 보장된다.- 불변, 필수 의존관계에 사용 @Componentpublic class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolic..