inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 빈 등록

222

whdk333

작성한 질문수 31

0

public class 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);
        int discountPrice = discountService.discount(member, 10000, "fixDiscountPolicy");
        assertThat(discountService).isInstanceOf(DiscountService.class);
        assertThat(discountPrice).isEqualTo(1000);
    }
    static class DiscountService {
        private final Map<String, DiscountPolicy> policyMap;
        private final List<DiscountPolicy> policies;
        public DiscountService(Map<String, DiscountPolicy> policyMap, List<DiscountPolicy> policies) {
            this.policyMap = policyMap;
            this.policies = policies;
            System.out.println("policyMap = " + policyMap);
            System.out.println("policies = " + policies);
        }

        public int discount(Member member, int price, String discountCode) {
            DiscountPolicy discountPolicy = policyMap.get(discountCode);
            System.out.println("discountCode = " + discountCode);
            System.out.println("discountPolicy = " + discountPolicy);
            return discountPolicy.discount(member, price);
        }
    }
}

 

 

이것들을 스프링빈으로 등록하면, 정확히 어떤 것들이 스프링 빈으로 등록되는건가요?

모든 필드, 메소드들이 다 등록되는건가요?

스프링 스프링빈 등록 bean spring 김영한강사님 강의

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

제공하신 코드를 바탕으로 설명드리자면, 스프링 빈 등록에 관련된 내용은 주로 스프링 컨테이너가 관리하는 객체들의 등록과 관련이 있습니다. @Bean 어노테이션이 붙은 메소드가 반환하는 객체 혹은 @Component 및 이를 포함하는 어노테이션(@Service, @Repository, @Controller 등)이 붙은 클래스는 스프링 빈으로 등록됩니다.

제시하신 코드에서는 @Test를 통해 DiscountService 클래스의 인스턴스를 생성하고 있으며, DiscountService 클래스가 직접적으로 스프링 빈으로 등록된 어노테이션을 포함하고 있지 않습니다. 따라서, 이 코드만으로는 DiscountService 가 스프링 빈으로 자동 등록되지 않습니다. 스프링 빈으로 등록하기 위해서는 @Configuration 클래스 내부에 @Bean 어노테이션을 사용하여 DiscountService를 반환하는 메소드를 정의해주거나, DiscountService 클래스에 @Component 계열의 어노테이션을 추가해주어야 합니다.

또한, 스프링에서는 객체(빈)의 인스턴스 자체를 관리합니다. 이는 해당 객체의 모든 필드와 메소드들이 스프링에 의해 “등록”된다는 뜻이 아닙니다. 즉, 스프링 빈으로 등록된다는 것은 그 객체의 인스턴스가 스프링 컨테이너에 의해 관리된다는 의미이며, 컨테이너가 해당 객체를 생성, 생명주기를 관리하고, 필요한 곳에 주입할 수 있게 됩니다.

따라서, 정리하자면 제시하신 코드의 경우, DiscountService 객체를 스프링 빈으로 명시적으로 등록하는 추가적인 구현이 필요합니다. 그리고 스프링 빈으로 등록되는 것은 해당 클래스의 인스턴스이며, 모든 필드와 메소드가 자동으로 스프링 빈으로 등록되는 것은 아닙니다.

네이버 API | '검색 - 책' API 제공 중단

0

17

1

Part 2 듣기전 복습하던 중, 아키텍처에 관한 질문이 있습니다.

0

32

2

장치 의존성과 CSR

0

30

1

테스트는 인터페이스를 대상으로 만드는것에 대해 궁금한 점이 있습니다.

0

22

1

[영한님]Spring Boot 및 프로젝트 생성

0

47

2

JPA 엔티티로 만들었다고 기술종속이 아닌지에 대한 질문

0

50

3

강의 요청 문의

0

37

2

클로드코드 명령어-대화&세션관리 수업 자료

0

40

1

PlatformTransactionManager, ResourcelessTransactionManager 질문

1

58

2

자료 한번에 다운받기

0

30

1

스프링 빈 등록 방법 2가지 다 알아야하는 이유

0

56

1

mybatis 를 이용한 crud에서 insert에서 resultType='long" 이라고 하셨는데요,

0

25

1

설계 트레이드 오프 링크 접속 안됨

0

82

2

테스트 질문, 어떤것을 사용할것인것에 대해서

0

40

1

깃허브주소 궁금합니다.

0

35

2

mariaDB 설정

0

30

1

섹션4 퀴즈 오타있어요.

0

42

1

AWS 배포 성능테스트

0

69

2

퀴즈가 안열려요

0

72

2

7강 보고 있는데요.. 글자가 너무 작아요

0

36

1

트래잭션 전파 기본- 에 대한 개념 질문? 이렇게 생각해도 맞나요?

0

43

1

헥사고날 아키텍처와 DDD를 적용할 때, 화면에 강하게 연관된 조회 데이터를 어떻게 다루는 게 좋은지 궁금합니다.

0

125

2

h2 database

2

53

2

별첨자료 URL 들어가면 404 떠요..

0

47

2