스프링 빈 등록
219
작성한 질문수 31
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);
}
}
}
이것들을 스프링빈으로 등록하면, 정확히 어떤 것들이 스프링 빈으로 등록되는건가요?
모든 필드, 메소드들이 다 등록되는건가요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
제공하신 코드를 바탕으로 설명드리자면, 스프링 빈 등록에 관련된 내용은 주로 스프링 컨테이너가 관리하는 객체들의 등록과 관련이 있습니다. @Bean 어노테이션이 붙은 메소드가 반환하는 객체 혹은 @Component 및 이를 포함하는 어노테이션(@Service, @Repository, @Controller 등)이 붙은 클래스는 스프링 빈으로 등록됩니다.
제시하신 코드에서는 @Test를 통해 DiscountService 클래스의 인스턴스를 생성하고 있으며, DiscountService 클래스가 직접적으로 스프링 빈으로 등록된 어노테이션을 포함하고 있지 않습니다. 따라서, 이 코드만으로는 DiscountService 가 스프링 빈으로 자동 등록되지 않습니다. 스프링 빈으로 등록하기 위해서는 @Configuration 클래스 내부에 @Bean 어노테이션을 사용하여 DiscountService를 반환하는 메소드를 정의해주거나, DiscountService 클래스에 @Component 계열의 어노테이션을 추가해주어야 합니다.
또한, 스프링에서는 객체(빈)의 인스턴스 자체를 관리합니다. 이는 해당 객체의 모든 필드와 메소드들이 스프링에 의해 “등록”된다는 뜻이 아닙니다. 즉, 스프링 빈으로 등록된다는 것은 그 객체의 인스턴스가 스프링 컨테이너에 의해 관리된다는 의미이며, 컨테이너가 해당 객체를 생성, 생명주기를 관리하고, 필요한 곳에 주입할 수 있게 됩니다.
따라서, 정리하자면 제시하신 코드의 경우, DiscountService 객체를 스프링 빈으로 명시적으로 등록하는 추가적인 구현이 필요합니다. 그리고 스프링 빈으로 등록되는 것은 해당 클래스의 인스턴스이며, 모든 필드와 메소드가 자동으로 스프링 빈으로 등록되는 것은 아닙니다.
빈 스코프 개념의 중요성
0
14
1
트랙잭션 격리수준 선택에 대해서 질문
0
22
1
안녕하세요 치킨 디도스 이벤트 보고 흉내내보려 들어왔습니다..
0
26
2
실무 내용 문의드려요
0
28
2
SingletonService가 JVM이 뜰 때 생성되는게 맞나요?
0
63
2
임포트 오류
0
39
2
답을언제쯤받아볼수있나요
0
55
2
형 책 어떻게 받아?
1
60
1
@JsonIgnore 이후 Internal Server Error가 발생하지 않습니다.
0
33
2
mvc 패턴 - 적용 강의에서 회원가입할 때 redirect가 아닌 forward인 이유가 궁금합니다.
0
31
1
프로젝트가 없어요..
0
61
2
JpaCursorItemReader의 정렬 조건 부재의 영향
1
47
2
changeTeam 메서드 질문
0
35
1
"컴파일 시점에 없는 값을 어떻게 참조할 것인가?" 섹션
1
54
2
테스트 관련 질문!
0
58
2
handleBindException 의 기대의도가 방향이 맞는지 궁금합니다.
0
43
2
SpringBoot 4.0.6 버전에서 PackageLogTracePostProcessor exception
0
90
3
인텔리제이 오류
0
53
1
프로젝트 의존 관계
0
53
2
application.properties가 적용되지 않아요
1
77
3
새 프로젝트 속 제너레이터에 SpringBoot가 없습니다.
0
55
2
섹션3. 11 회원객체 다이어그램
0
37
1
OCP, DIP과 @Qualifier 어노테이션에 대해서 질문합니다.
0
40
1
강의 연장 요청
0
49
2





