[Spring 기본] 빈 스코프 (3)
Dev/Spring2022. 12. 18. 20:01[Spring 기본] 빈 스코프 (3)

♪ 학습 내용 웹 스코프 / 프록시 * 웹 스코프 앞에서 본 프로토타입 스코프는 요청 시에 생성하고 초기화까지만 진행, 반환. 더 이상 관리 x 웹 스코프는 스프링이 종료 시점까지 관리한다. 종류로는 request, session, application, websocket 이 중 request 스코프를 다뤘다. 프로토타입은 요청마다 새로운 생성했지만, request는 HTTP request에 요청이 들어오고 나갈때까지, 그 라이프 사이클 동안 유지된다. 그리고 각 요청마다 새로 생성하여 다른 인스턴스를 넘김!! 만약 같은 요청이 Controller 외에 Service에서도 호출되면 같은 인스턴스를 반환 (각각의 요청마다 이므로) 실행하면 오류 발생한다 왜?? @RequiredArgsConstructor ..

[Spring 기본] 빈 스코프 (2)
Dev/Spring2022. 11. 28. 00:23[Spring 기본] 빈 스코프 (2)

♪ 학습 내용 싱글톤 빈과 프로토타입 빈 충돌 시 * 싱글톤 빈과 프로토타입 빈 함께 사용시 문제 싱글톤 빈인 ClientBean이 생성자 주입으로 프로토타입 빈을 주입 받는 상황을 가정해보면 ClientBean은 싱글톤이기에 컨테이너에서 쭉 관리. 따라서 여러 고객이 ClientBean을 요청해도 같은 인스턴스를 반환해준다. 문제는 생성자 주입으로 프로토타입 빈과 의존관계를 맺기 때문에, 여러 고객이 요청한 ClientBean 이 의존하는 프로토타입 빈도 전부 같은 인스턴스이다. 빈 스코프가 프로토타입이면 매 요청시 새로운 빈을 반환해야 하는데 그게 깨져버린 상황 발생! 즉 주입 시전에 프로토타입 빈이 새로 생성되는 것이지, 요청마다 새로 생성되는 것이 아님. 원하는 건 싱글톤 빈에서도 해당 프로토타입..

[Spring 기본] 빈 스코프 (1)
Dev/Spring2022. 11. 25. 02:28[Spring 기본] 빈 스코프 (1)

♪ 학습 내용 빈 스코프 / 싱글톤 스코프 / 프로토타입 스코프 * 빈 스코프란 무엇인가 빈 스코프란 무엇인가?? 스코프에 대해서는 jsp 맛보기 공부하거나 spring 입문 강의할 때 몇번 듣고 사용해봤는데 사실 잘 모른다. 대충 느낌적으로는 영역? 이정도로 이해하고 있다. - 스코프는 빈이 존재할 수 있는 범위를 뜻한다. 스코프의 종류는 다음과 같이 다양하다 싱글톤 스코프(디폴트) / 프로토타입 스코프 / 웹 관련 스코프( request, session, application ) 등록할 때는 애노테이션을 이용해서 @Scope("singleton" 또는 "prototype") @Component(자동 등록) 나 @Bean(수동등록) 에 붙는다. * 싱글톤 스코프 싱글톤 스코프가 바로 우리가 여태 사용해..

[Spring 기본] 빈 생명주기 콜백
Dev/Spring2022. 11. 22. 22:45[Spring 기본] 빈 생명주기 콜백

♪ 학습 내용 빈 생명주기 콜백 * 빈 생명주기 콜백 애플리케이션 시작 시점에 연결 미리 해두고 종료 이전에 연결을 종료(안전하게) ( like 애플리케이션 과 DB를 미리 연결 해두는 ) 를 위해서는 객체의 초기화, 종료작업 필요!! 스프링 빈은 다음과 같이 두 단계로 이루어진다는 것을 앞에서 학습했다. 1. 빈 객체 생성 2. 의존관계 주입 이 과정이 모두 끝난 후에야 데이터를 사용할 수 있는 준비 완료됨. 그렇다면 의존관계가 끝난 후에 초기화 작업을 해야하는데. 우리가 스프링 빈의 의존관계 주입이 끝났는 지 어떻게 알 수가 있나.. ? 초기화 콜백 ==> 의존관계 주입까지 끝났으니 이제 너 하고싶은 대로 마음대로 해 생성자 인젝션은 스프링 빈 생성과 동시에 의존관계 주입을 한다는 것을 앞에서 학습했..

[Spring 기본] 의존관계 자동 주입 (4)
Dev/Spring2022. 11. 20. 23:18[Spring 기본] 의존관계 자동 주입 (4)

♪ 학습 내용 조회되는 동일 타입의 빈 모두 필요 할 경우 / 자동 또는 수동 빈 운영 기준 * 조회 빈 모두 이용 스프링 컨테이너에 등록된 빈 중 동일 타입이 있을 경우 오류 발생. 전 학습에서 우선순위를 두거나 고르는 방식으로 하나를 골라 조회했었다. 이번에는 조회되는 빈 모두를 이용..! List 와 Map 을 이용해본다 Map은 key 값으로 스프링 빈 이름이, value 값으로 DiscountPolicy 타입의 스프링 빈이 담아진다 (rateDiscountPolicy, fixDiscountPolicy 가 담아지겠지 ? ) 생성자 의존관계 주입 이용( 생성자가 하나이므로 @Autowired 지워도 똑같다 ) discountCode로 넘어오는 스프링 빈 이름으로 빈을 찾고, 해당 객체의 discou..

[Spring 기본] 의존관계 자동 주입 (3)
Dev/Spring2022. 11. 19. 17:47[Spring 기본] 의존관계 자동 주입 (3)

♪ 학습 내용 의동일한 타입의 빈이 두개 이상일 경우에 의존관계 자동 주입 / 애노테이션 생성 * 여러 동일 타입 빈 Autowired는 컨테이너에서 빈을 찾아 자동으로 주입해준다는 것을 학습했다. 이때 빈을 찾는 방식은 타입으로 조회이다. ac.getBean(DiscountPolicy.class); 와 비슷하다. 그렇다면 컨테이너에 동일한 타입의 스프링 빈이 두개 이상이라면 어떻게 될까?? 실행 시 오류가 발생한다 어떻게 해결할 수 있을까?? 만약 다음과 같이 하위 타입으로, 구현에 의존한다면 오류는 사라질 것이다 @Autowired public OrderServiceImpl(MemberRepository memberRepository, RateDiscountPolicy discountPolicy) {..

[Spring 기본] 의존관계 자동 주입 (2)
Dev/Spring2022. 11. 18. 02:22[Spring 기본] 의존관계 자동 주입 (2)

♪ 학습 내용 의존관계 주입 옵션처리 / 생성자 주입 / 롬복 라이브러리 설정 및 이용 * 옵션처리 @Autowired 이용 시에 해당하는 자동 주입 대상이 없으면 오류가 발생한다 하지만 개발하다보면 빈 없이도 동작해야할 때가 가끔 있기 때문에 따로 처리가 필요 세가지 방법!! - Autowired의 required 값을 false로 설정한다 (디폴트는 true) @Autowired(required = false) public void setNoBean(Member member){ System.out.println(member); } 위의 Member클래스는 스프링에서 관리하는 클래스가 아니기 때문에 빈으로 등록되어있지 않고 자동의존관계 주입도 불가하다. 하지만 Autowired의 required 옵션의..

[Spring 기본] 의존관계 자동 주입 (1)
Dev/Spring2022. 11. 13. 23:17[Spring 기본] 의존관계 자동 주입 (1)

♪ 학습 내용 의존관계 주입 방법 ** 의존관계 주입 방법 앞에서는 빈을 자동 등록하고 @Autowired를 이용해 의존관계 자동 주입하는 것 배웠다 이 방법을 통해 의존관계 주입하는 방법에는 4가지가 있다 - 생성자 주입 - 수정자 주입 - 필드 주입 - 일반 메서드 주입 * 생성자 주입 여태까지 학습하면서 했던 것들이 바로 생성자 주입..!! 스프링 컨테이너에서 스프링 빈을 등록하기 위해 객체를 생성, 이때 생성자로 호출하여 생성하고 반환하기 때문에 그 과정에서 의존관계를 주입한다 따라서 생성자 주입은 필수성을 지닌다 또한 생성자 주입은 생성자 호출할 시에 딱 한번만 호출되기 때문에(별도 설정을 만들지않는 한) 불변성을 가진다 만약에 생성자가 한개만 있다면 @Autowired 애노테이션을 생략해도 무..

[Spring 기본] 컴포넌트 스캔 (2)
Dev/Spring2022. 11. 12. 19:02[Spring 기본] 컴포넌트 스캔 (2)

♪ 학습 내용 컴포넌트 스캔 필터 및 중복 등록 * 컴포넌트 스캔 필터 컴포넌트 스캔의 필터( Filter ) 를 이용해 내가 원하는 대상을 컴포넌트 스캔 대상에 추가하거나 제외시킬 수 있다. 임의로 만든 MyIncludeComponent 와 MyExcludeComponent 애노테이션을 각각 BeanA 와 BeanB클래스에 적용 FilterType.ANNOTATION 은 애노테이션과 관련된 필터를 의미한다. - includeFilters 에 @MyIncludeComponent 추가했다 - excludeFilters 에 @MyExcludeComponent 추가했다 assertThat(beanA).isNotNull(); //실행 결과 : 통과 //beanA는 @MyIncludeComponent 애노테이션이..

[Spring 기본] 컴포넌트 스캔 (1)
Dev/Spring2022. 11. 10. 23:57[Spring 기본] 컴포넌트 스캔 (1)

♪ 학습 내용 컴포넌트 스캔 및 의존관계 자동 주입 * 컴포넌트 스캔 여태까지 스프링 컨테이너에 빈을 등록하기 위해서는 설정 정보에 @Bean을 이용 만약 스프링 빈으로 등록할 게 수천 수만가지라면 ? 컴포넌트 스캔( @ComponentScan ) 을 이용하면 더 간단하게 빈 등록할 수 있다. 설정 정보에 @ComponentScan을 붙이고 Bean으로 등록할 클래스 앞에 @Component를 붙여준다 그러면 @ComponeneScan에서 @Component 을 스캔 후 빈으로 등록한다. 기본적으로 @Configuration 도 내부적으로 @Component를 포함하고 있기 때문에 탐색 조건에 해당한다 앞서 만들었던 설정 정보(수동 Bean 등록)랑 겹치면 안되니까 스캔 대상에서 제외했다. * 의존관계 ..

image