본문 바로가기

Back-End173

빈 생명주기 콜백 이 글은 김영한 님의 스프링 핵심 원리 - 기본편을 수강하며 정리한 글입니다. 데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해 두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요하다. 😧 초기화 작업이 의존 관계 주입과 함께 호출되었을 때의 문제점 더보기 간단하게 외부 네트워크에 미리 연결하는 객체를 하나 생성한다고 가정해 보자. 애플리케이션 시작 시점에 connect()를 호출해서 연결을 맺어 두어야 하고, 애플리케이션이 종료되면 disConnect()를 호출해서 연결을 끊어야 한다. @Test public void lifeCycleTest() { // ApplicationContext에는 close를.. 2022. 3. 26.
의존관계 자동 주입 - 조회한 빈이 모두 필요할 때, List, Map 이 글은 김영한 님의 스프링 핵심 원리 - 기본편(https://inf.run/ZtdV)을 수강하며 정리한 글입니다. 할인 서비스를 제공하는데, 클라이언트가 할인의 종류(rate, fix)를 선택할 수 있다고 가정한다. 💡 AllBeanTest @Test void findAllBean() { ApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class, DiscountService.class); DiscountService discountService = ac.getBean(DiscountService.class); Member member = new Member(1L, "userA", Grade.VIP); //할인이.. 2022. 3. 21.
의존관계 자동 주입 - 애노테이션 직접 만들기 이 글은 김영한 님의 스프링 핵심 원리 - 기본편(https://inf.run/ZtdV)을 수강하며 정리한 글입니다. @Qualifier("mainDiscountPolicy") 괄호 안의 문자는 컴파일 시 타입 체크가 안 돼서 오타가 발생해도 오류를 잡을 수 없는데, 애노테이션을 만들어서 문제를 해결할 수 있다. 📚 annotation 🍥 MainDiscountPolicy 애노테이션은 상속의 개념이 없다. 때문에 일반 @Qualifier처럼 사용할 수 있도록 @Qualifier에 붙은 애노테이션들을 가져와서 붙여 준다. (1 ~ 3줄) 단지 오타를 방지하기 위해 @Qualifier를 사용하는 것과 같은 하나의 애너테이션을 만든 것뿐이다. Ctrl + B 단축키를 통해 사용되는 곳을 쉽게 알 수 있어서 편.. 2022. 3. 21.
의존관계 자동 주입 - 조회 빈이 2개 이상일 때: @Autowired 필드 명, @Qualifier, @Primary 이 글은 김영한 님의 스프링 핵심 원리 - 기본편을 수강하며 정리한 글입니다. @Autowired 필드 명 매칭 @Autowired는 먼저 타입 매칭을 시도한 후, 여러 빈이 있으면 필드 이름, 파라미터 이름으로 빈 이름을 추가 매칭한다. @Autowired private DiscountPolicy rateDiscountPolicy DiscountPolicy 타입을 조회하면 fixDiscountPolicy, rateDiscountPolicy가 조회된다. rateDiscountPolicy가 매칭된다. @Quilfier 구분할 수 있는 추가 옵션(제2의 이름)을 제공한다. 모든 코드에 @Qualifier를 붙여 주어야 한다는 단점이 있다. @Component @Qualifier("mainDiscountPol.. 2022. 3. 21.
의존관계 자동 주입 방법 이 글은 김영한 님의 스프링 핵심 원리 - 기본편(https://inf.run/ZtdV)을 수강하며 정리한 글입니다. 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 의존관계 자동 주입은 스프링 컨테이너가 관리하는 스프링 빈이어야 동작한다는 것을 전제로 한다. 생성자 주입 생성자 호출 시점에 딱 1번만 호출되는 것이 보장된다. 불변, 필수 의존관계에 사용한다. (이후에 값을 수정할 수 없어서 안전하다.) @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository private final DiscountPolicy discountPoli.. 2022. 3. 20.
🌟 컴포넌트 스캔과 의존관계 자동 주입 이 글은 김영한 님의 스프링 핵심 원리 - 기본편을 수강하며 정리한 글입니다. 컴포넌트 스캔 @ComponentScan 설정 정보가 없어도 @Component가 붙은 모든 클래스를 자동으로 스프링 빈으로 등록한다. @Configuration @ComponentScan public class AutoAppConfig { // 의존관계는 @Autowired를 사용하여 주입한다 // 구현체인 MemoryMemberRepository, RateDiscountPolicy, ... 클래스에 @Component를 붙인다 } 🌳 필터 includeFilters: 컴포넌트 스캔 대상을 추가로 지정 excludeFilters: 컴포넌트 스캔에서 제외할 대상을 지정 더보기 @Target(ElementType.TYPE) @R.. 2022. 3. 19.