Java spring 기초2

BioBeBE·2022년 10월 10일
0

자바

목록 보기
7/8

어제 AppConfig Class로 memberApp, orderApp에서 필요한 memberService, memberRepository, orderService 등을 생성자로 주입해줬다.

이걸 스프링으로 바꿔볼 차례다.

자바 >> 스프링

클래스에 @Configuration을 class를 반환하는 메소드에는 @Bean으로 스프링 컨테이너에 빈 등록을 해준다.

AnnotationConfigApplicationContext에 파라미터 값으로 넘긴 값은 스프링 빈으로 등록 된다

ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class)

빈 이름빈 객체
memberServiceMemberServiceImpl@x01
orderServiceOrderServiceImpl@x02
memberRepositoryMemoryMemberRepository@x03
discountPolicyRateDiscountPolicy@x04

이때 AppConfig Class에 @Configuration이 붙어 memberService와 orderService에서 memberRepository를 필요로 할때 한 개의 객체만 생성이 됨

싱글톤 확인해보기


어제 발생했던 오류
(MemoryMemberRepository내에 HashMap static 키워드 깜빡)

어제 오류 났던 MemoryMemberRepository 내에 Member 정보를 저장하는 HashMap의 static 키워드를 삭제하고 orderServiceTest 실행
orderService에서 저장한 memberRepository와 memberService에서 저장한 memberRepository가 같은 객체기 때문에 hashMap이 static zone에 없어도 오류가 나지 않고 저장한 멤버를 불러와 주문을 진행할 수 있음

AppConfig @Configuration 삭제


똑같은 orderServiceTest 지만 서비스마다 불러온 Repository 객체가 다르므로 테스트 오류 발생

어떻게 스프링은 싱글톤 컨테이너로?
CGLIB 바이트코드 조작 라이브러리가


AppConfig 빈 조회를해서 이름을 보면 클래스 이름 뒤에 뭐가 붙었다.
@Configuration 내에 @Bean등록은 CGLIB을 통해 AppConfig를 상속받는 임의의 클래스를 만들고 컨테이너에 넣어주기 때문이다.

출처 : 인프런 - 우아한 형제들 기술이사 김영한의 스프링 완전 정복 (스프링 핵심원리 - 기본 편)

profile
개발자지망생

0개의 댓글