[Spring][스프링 핵심 원리] 스프링 컨테이너와 스프링

2023. 1. 12. 12:00·공부/Spring
728x90

본 포스팅은 김영한 강사님의 인프런 강의 "스프링 핵심 원리 - 기본편"을 정리한 포스팅으로 강의 자료에서 사용한 자료를 사용했음을 밝힙니다.

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8#

 

스프링 핵심 원리 - 기본편 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com

 

스프링 빈 등록

 

먼저 @Configuration 이라는 어노테이션을 달아서 AppConfig라는 설정 정보를 만들어준다.

 

@Configuration
public class AppConfig {
    @Bean
    public MemberRepository memberRepository(){
        return new MemoryMemberRepository();
    }
    @Bean
    public MemberService memberService(){
        return new MemberServiceImpl(memberRepository());
    }
    @Bean
    public OrderService orderService(){
        return new OrderServiceImpl(memberRepository(), discountPolicy());
    }
    @Bean
    public DiscountPolicy discountPolicy(){
        return new FixDiscountPolicy();
    }
}

@Bean 어노테이션을 사용하면 해당 메소드의 이름으로 스프링 빈에 등록할 수 있다.

 

스프링 컨테이너 생성

 

스프링 빈에 등록하기 위해서는 스프링 컨테이너를 생성해야 한다.

 

스프링 컨테이너를 생성할 때는 AnnotationConfigApplicationContext를 사용하고 만들어둔 configuration을 구성 정보로 지정한다.

AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);

 

만들어둔 AppConfig를 구성 정보로 지정했다.

 

이렇게 스프링 컨테이너를 생성하고 나면 

  1. 스프링 컨테이너의 빈 저장소에 스프링 빈을 등록한다.
  2. 설정 정보를 바탕으로 의존 관계를 주입한다.

 

스프링 빈 조회

 

스프링 빈을 등록하고 나면 이를 가져와서 사용할 수 있어야 한다.

 

스프링 빈을 조회할 때는 AnnotationConfigApplicationContext 인스턴스의 getBean 메소드를 사용해서 조회할 수 있다.

 

1. 빈 이름과 타입으로 조회하는 방법

 

빈 이름을 따로 정해두지 않았다면 메소드 이름이 곧 빈 이름이 된다.

 

설정 정보에서 memberService라는 메소드의 빈 이름은 따로 정해두지 않았으므로 memberService가 곧 빈 이름이 된다.

 

빈 이름을 정하는 방법은 Bean 어노테이션에서 name을 사용하면 된다.

 

memberService의 빈 이름을 memberServiceEx라고 정하고 싶다면 다음과 같은 코드를 작성하면 된다.

@Bean(name="memberServiceEx")
public MemberService memberService(){
    return new MemberServiceImpl(memberRepository());
}
 빈 이름과 메소드 이름은 다르게 해야 한다.

일단은 빈 이름은 따로 정하지 않은 방식을 사용할 예정이다.

 

첫 번째 인자로 빈 이름을 넣어주고 두 번째 인자로 클래스 타입을 넣어준다.

MemberService memberService = ac.getBean("memberService", MemberService.class);

 

2. 타입으로만 조회하는 방법

 

MemberService memberService = ac.getBean(MemberService.class);

인자로 클래스 타입만 넣어주면 된다.

 

그런데 해당 클래스 타입을 상속한 클래스가 여럿 존재한다면 불가능하다.

 

그럴 때는 getBeansOfType 메소드를 사용해야한다.

Map<String, MemberService> beansOfType = ac.getBeansOfType(MemberService.class);

 

해당 타입을 모두 조회한다.

 

스프링 빈을 타입으로 조회하면 그 자식 타입까지 모두 조회하게 된다.

 

 

728x90

'공부 > Spring' 카테고리의 다른 글

[Spring][스프링 핵심 원리] 조회한 빈이 두 개 이상일 때 문제 해결  (0) 2023.01.22
[Spring][스프링 핵심 원리] 의존 관계 주입 방법 및 옵션 처리  (0) 2023.01.19
[InteliiJ] 인텔리제이 단축키  (2) 2023.01.10
[Spring][인프런 스프링 입문] AOP가 필요한 상황 및 적용  (0) 2023.01.06
[Spring][인프런 스프링 입문] Test 코드 작성  (0) 2023.01.02
'공부/Spring' 카테고리의 다른 글
  • [Spring][스프링 핵심 원리] 조회한 빈이 두 개 이상일 때 문제 해결
  • [Spring][스프링 핵심 원리] 의존 관계 주입 방법 및 옵션 처리
  • [InteliiJ] 인텔리제이 단축키
  • [Spring][인프런 스프링 입문] AOP가 필요한 상황 및 적용
웅대
웅대
알고리즘과 백엔드를 중심으로 열심히 공부 중입니다! 같이 소통하며 공부해요!
    250x250
  • 웅대
    웅대 개발 블로그
    웅대
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 백준 알고리즘
        • dp
        • 문자열
        • 정렬
        • 스택
        • 브루트 포스
        • 이진 탐색
        • 정리
        • 우선순위 큐
        • 자료구조
        • 그래프
        • 기타
        • 그리디
      • 컴퓨터 언어
        • Kotlin
        • Python
        • C#
      • 공부
        • Database
        • Android Studio
        • Algorithm
        • 컴퓨터 구조론
        • Spring
        • lombok
        • AWS
        • Network
        • OS
        • Git & GitHub
        • AI
        • Computer Vision
        • 보안
        • Nginx
        • 프론트
        • express
        • GCP
        • grokking concurrency
        • DevOps
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    nn.RNN
    ChatPromptTemplate
    Vector Store
    스택
    다익스트라
    푸쉬 알람
    code tree
    binary search
    bfs
    parametric search
    openvidu 배포
    embedding
    ci/cd
    파이썬
    codetree
    RNN
    influxDB CLI
    AWS Lambda
    스프링 OAuth2
    Merge
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
웅대
[Spring][스프링 핵심 원리] 스프링 컨테이너와 스프링
상단으로

티스토리툴바