월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨스프링 핵심 원리 - 기본편
[섹션6.중복 등록과 충돌] 동일 이름의 빈 수동, 자동 등록시 오버라이딩 관련하여
안녕하세요. 질문이 생겼습니다. 강의: 섹션6. 중복 등록과 충돌내용:3분 50초: "동일 이름의 빈이 자동, 수동 등록될 경우 수동등록을 우선하여 오버라이딩한다."AutoAppConfig.java에서 수동 빈 등록 메서드에 오타를 내어 반환 타입을 MemberRepostitory 대신 MemoryMemberRepository로 설정하였습니다. @Configuration @ComponentScan( // basePackages = "hello.core.member", // basePackageClasses = AutoAppConfig.class, excludeFilters = @ComponentScan.Filter(type= FilterType.ANNOTATION, classes = Configuration.class) // AppConfig가 등록되지 않도록 제외시킴. ) public class AutoAppConfig { @Bean(name = "memoryMemberRepository") public MemoryMemberRepository memberRepository() { // 오타부분 return new MemoryMemberRepository(); } }이 경우 AutoAppConfigTest실행시에 overriding 관련 로그가 없습니다.스프링 부트를 실행해도(CoreApplication 실행) 에러가 발생하지 않습니다.질문1) 같은 이름으로 같은 타입의 객체가 빈 등록되는데 오버라이딩되지 않으면 어떻게 된 것인지2) 이 상황에서 빈 수동 등록 메서드의 반환형이 어떤 영향을 미친건지 감사합니다.
- 해결됨스프링 핵심 원리 - 기본편
프로젝트를 오랜만에 실행하는 과정에서의 실행 문제
프로젝트를 실행하는데 있어 다음과 같이 정상적으로 실행되지 않아 질문을 올립니다.뚜렷한 에러 코드가 없어 어떤 설정이 문제인지 어떤 방식으로 해결해야 하는지 궁금합니다!https://drive.google.com/file/d/1vC-tIcbO8hDnNhJWwr3yidCHsA0nqnmk/view?usp=sharing
- 해결됨스프링 핵심 원리 - 기본편
private final MemberRepository 부분 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]static vs final vs static final의 차이점을 이해하고 다시 코드를 보았는데 여기서 강사님이 아래와 같이 코드를 작성하셨습니다.근데 여기서 한 가지 궁금한 것이 있습니다. final은 추후 생성자를 통한 의존성 주입에서 권장되는 사용 방식이라 final을 붙여주는 것도 있고 값을 더하거나 뺄 수 있게끔 하면서 재할당은 안되게끔 MemberRepository 코드 쪽에서 final을 쓰신 것으로 이해를 하고 있는데요.여기서 static을 사용할 수도 있겠지만(메모리 저장소만 사용하고 순수 자바로만 구현한다면) 추후에 스프링으로 넘어가 생성자에 의한 의존성 주입때문에 static을 사용하지 않는 것으로 이해한 것이 맞을까요?
- 미해결스프링 핵심 원리 - 기본편
한 클래스 내 생성자가 2개 이상이면 @Autowired 붙여야만 의존관계 주입이 이뤄지나요??
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]아래 코드처럼 한 클래스 내 생성자가 2개 이상인 경우, @Autowired를 주입하지 않으면 의존관계 주입이 이뤄지지 않나요???강의 내용에선 생성자가 1개인 경우 @Autowired를 생략해도 의존관계 주입이 자동으로 이뤄진다했는데, 2개 이상인 경우에도 되는 것 같아서요!@Component public class MyClass { private DependencyA dependencyA; private DependencyB dependencyB; public MyClass(DependencyA dependencyA) { this.dependencyA = dependencyA; } public MyClass(DependencyA dependencyA, DependencyB dependencyB) { this.dependencyA = dependencyA; this.dependencyB = dependencyB; } }
- 해결됨스프링 핵심 원리 - 기본편
제가 이해한 내용이 맞을까요?
public class AppConfig { @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public OrderService orderService() { return new OrderServiceImpl( memberRepository(), discountPolicy()); } @Bean public MemberRepository memberRepository() { return new MemoryMemberRepository(); } @Bean public DiscountPolicy discountPolicy() { return new RateDiscountPolicy(); } }AppConfig 클래스는 각 의존관계 함수들을 @Bean을붙였는데 @Configuration @ComponentScan( excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuration.class)) public class AutoAppConfig { }AutoAppConfig클래스는 @ComponentScan 어노테이션을 붙이고각 구현 클래스에서는 @component 어노테이션을,의존관계가 필요한 생성자에는 @Autowirde어노테이션을 붙이면 AppConfig클래스처럼 각 함수를 다 구현하지 않아도 된다는 말씀인건가요?
- 해결됨스프링 핵심 원리 - 기본편
Autowired 빨간줄 이유
Autowired 빨간줄 뜨는 이유가 DiscountService를 Component로 등록하지 않아서 그런건가요? 의존관계를 주입할 때는 항상 Component로 등록되어야하는지도 궁금합니다
- 해결됨스프링 핵심 원리 - 기본편
org.springframework.beans.factory.UnsatisfiedDependencyException
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]section7 @Autowired 필드 명, @Qualifier, @Primary의 약 2:16초강의의 내용대로 아래의 코드를 public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy rateDiscountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = rateDiscountPolicy; } 이렇게 바꿔주었지만 AutoAppConfigTest > basicScan()에서org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'orderServiceImpl' defined in file [/Users/dani/Desktop/dani/practice-spring/spring-basic/core/out/production/classes/hello/core/order/OrderServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 1: No qualifying bean of type 'hello.core.discount.DiscountPolicy' available: expected single matching bean but found 2: fixDiscountPolicy,rateDiscountPolicy at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:798) at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:237) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1354) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1191) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:561) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:975) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:959) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:624) at org.springframework.context.annotation.AnnotationConfigApplicationContext.<init>(AnnotationConfigApplicationContext.java:93) at hello.core.scan.AutoAppConfigTest.basicScan(AutoAppConfigTest.java:16) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'hello.core.discount.DiscountPolicy' available: expected single matching bean but found 2: fixDiscountPolicy,rateDiscountPolicy at org.springframework.beans.factory.config.DependencyDescriptor.resolveNotUnique(DependencyDescriptor.java:218) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1420) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1353) at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:907) at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:785) ... 17 more오류가 났습니다. 그래서 https://docs.google.com/document/d/1j0jcJ9EoXMGzwAA2H0b9TOvRtpwlxI5Dtn3sRtuXQas/edit#heading=h.b1yk4ued1pxo이 문서의 해결방안3대로 해보았더니 BeanDefinitionTest > 빈 설정 메타정보 확인XmlAppContext > xmlAppContext()에서 org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'orderService' defined in class path resource [appConfig.xml]: Unsatisfied dependency expressed through constructor parameter 1: Ambiguous argument values for parameter of type [hello.core.discount.DiscountPolicy] - did you specify the correct bean references as arguments? at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:779) at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:237) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1354) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1191) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:561) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:975) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:959) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:624) at org.springframework.context.support.GenericXmlApplicationContext.<init>(GenericXmlApplicationContext.java:71) at hello.core.beandefinition.BeanDefinitionTest.<init>(BeanDefinitionTest.java:13) at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502) at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486) at java.base/java.util.Optional.orElseGet(Optional.java:364) at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)같은 오류가 발생하였습니다.어떻게 해결하면 될까요? 아래는 저의 코드입니다.package hello.core; import hello.core.discount.DiscountPolicy; import hello.core.discount.FixDiscountPolicy; import hello.core.discount.RateDiscountPolicy; import hello.core.member.MemberRepository; import hello.core.member.MemberService; import hello.core.member.MemberServiceImpl; import hello.core.member.MemoryMemberRepository; import hello.core.order.OrderService; import hello.core.order.OrderServiceImpl; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class AppConfig { @Bean public MemberService memberService() { System.out.println("call AppConfig.memberService"); return new MemberServiceImpl(memberRepository()); } @Bean public MemberRepository memberRepository() { System.out.println("call AppConfig.memberRepository"); return new MemoryMemberRepository(); } @Bean public OrderService orderService() { System.out.println("call AppConfig.orderService"); return new OrderServiceImpl(memberRepository(), discountPolicy()); // return null; } @Bean public DiscountPolicy discountPolicy() { return new RateDiscountPolicy(); } } package hello.core.order; import hello.core.discount.DiscountPolicy; import hello.core.discount.FixDiscountPolicy; import hello.core.discount.RateDiscountPolicy; import hello.core.member.Member; import hello.core.member.MemberRepository; import hello.core.member.MemoryMemberRepository; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component //@RequiredArgsConstructor //생성자 만들어줌 public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; //추상화인 인터페이스에 의존 @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy rateDiscountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = rateDiscountPolicy; } @Override public Order createOrder(Long memberId, String itemName, int itemPrice) { Member member = memberRepository.findById(memberId); int discountPrice = discountPolicy.discount(member, itemPrice); return new Order(memberId, itemName, itemPrice, discountPrice); } //테스트 용도 public MemberRepository getMemberRepository() { return memberRepository; } } +) 방법2도 추가로 실행해보았으나 같은 결과가 떴습니다.
- 해결됨스프링 핵심 원리 - 기본편
프로젝트탭에서 자바 아이콘 동일 문제
안녕하세요.프로젝트 탭에서 자바아이콘이 모두 커피잔(?)으로 동일하게 나오고 있어서 문의 드립니다.구글에 아무리 뒤져봐도 저같은 경우는 없는 것같아서 문의 드려요.같은 자바 파일이여도 Class파일은 'C' 아이콘, Interface파일은 'I'아이콘 어노테이션은 '@'아이콘 등등 으로 나오는게 정상인 것 같은데 확인 부탁드려요...▶
- 미해결스프링 핵심 원리 - 기본편
섹선5 [싱글톤 방식의 주의점] 질문
안녕하세요, 싱글톤 테스트 코드에서 OrderService, MemberService 인터페이스의 구체인 OrderServiceImpl과 MemberServiceImpl 클래스에서 각각 생성자로 주입되어져 있는 memberRepository 객체를 꺼내서 프린트해봤는데 서로 다른 객체라고 뜹니다 뭐가 문제일까요? 코드는 강의 교안과 일치합니다
- 미해결스프링 핵심 원리 - 기본편
혹시 이 강의에 서블릿도 포함되어있나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]서블릿과 스프링을 따로 공부안하고 진행해도 서블릿과 스프링을 이해할수있는 과정이 포함되어있나여?
- 미해결스프링 핵심 원리 - 기본편
섹션 4 <컨테이너에 등록된 모든 빈 조회> 질문
ApplicationContextInfoTest 클래스에서 질문이 있는데요 기존에는 스프링 컨테이너를 생성해주는 코드를ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); 였는데 이번 강의에서는 AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); 로 사용하신 거에 대해서 ApplicationContext로 선언했을 때와 AnnotationConfigApplicationContext로 선언한 것의 차이점이 궁금합니다.
- 해결됨스프링 핵심 원리 - 기본편
request 스코프 예제 만들기에서 springboot starter web 구현 추가후 실행 실패
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]build.gradle문서에 web 라이브러리 추가 후 CoreApplication에서 main을 실행시키니 오류가 뜹니다.. 오류문장은 다음과 같습니다.Execution failed for task ':compileJava'.> Could not resolve all files for configuration ':compileClasspath'. > Could not find javax.inject:javax:inject. Required by: project :Possible solution: - Declare repository providing the artifact, see the documentation at https://docs.gradle.org/current/userguide/declaring_repositories.html 어떻게 해결하면 좋을까요?
- 미해결스프링 핵심 원리 - 기본편
프로젝트 오픈방법 질문
프로젝트 오픈시, build.gradle을 선택해서 여시는데 그러는 이유가 있는건가요?그냥 core폴더를 선택해서 여는 것이랑 차이가 있는건가요?
- 해결됨스프링 핵심 원리 - 기본편
[섹션 6] @Autowired 와 컨테이너 생성 순서
안녕하세요.섹션6에서 @Autowired에 대해서 공부하다가 잘 이해가 되지 않는 부분이 있어서 질문드립니다. 컨테이너는,스프링 컨테이너 생성스프링 컨테이너 내부의 빈 저장소에 빈 이름과 객체 등록설정 정보를 기반으로 빈 간의 의존관계 설정의 과정으로 생성된다고 [섹션 4]에서 학습하였습니다.이 과정에서 이해가 잘 되지 않는 것이 있습니다.@Component public class MemberServiceImpl implements MemberService { private final MemberRepository memberRepository; @Autowired public MemberServiceImpl(MemberRepository memberRepository) { this.memberRepository = memberRepository; } } 빈 저장소에 빈 이름(memberServiceImpl)과 빈 객체를 등록하려면, 생성자를 호출해야 하지 않나요??생성자를 호출하려면 MemberRepository 타입의 빈을 찾아서 의존관계 주입을 해줘야 하는데, 이러면 컨테이너 생성 과정의 [2], [3]번이 동시에 실행되는 것이 아닌지 궁금합니다. memberServiceImpl 빈 등록-> 생성자 호출 필요-> 매개 변수 MemberRepository memberRepository 전달 필요-> memberRepository 빈을 전달함(의존 관계 주입) [순서 3]-> 객체 생성 완료 [순서 2] 제가 이해한 빈 등록 과정입니다.결국, 의존관계 주입과 빈 객체 등록은 동시에 이루어지는 것이 아닌지 궁금합니다.잘못된 부분이 있는지 알려주세요! 감사합니다.
- 미해결스프링 핵심 원리 - 기본편
스프링 메인 메서드 실행 오류
스프링 부트 메인 메서드 실행 시 해당 오류가 뜨는데어디 쪽을 확인해 봐야 할까요?... MemberServiceImpl, MemberRepository, MemoryMemberRepository에는 잘 못 된 부분이 없는 것 같아서요...
- 미해결스프링 핵심 원리 - 기본편
선생님 혹시 실전! 스프링 부트 이건 언제 출시 예정인가요?
선생님 혹시 실전! 스프링 부트 이건 언제 출시 예정인가요?올해 예정일까욤?
- 해결됨스프링 핵심 원리 - 기본편
No Scope registered for scope name 'request'
마지막 강의까지 다 라이브코딩 한 후 전체 테스트를 돌려봤는데 에러가 발생하네요.@Component @Scope(value="request", proxyMode = ScopedProxyMode.TARGET_CLASS) public class MyLogger {오타도 없는데 뭐가 문제일까요?
- 미해결스프링 핵심 원리 - 기본편
basicScan 실행 시, NoUniqueBeanDefinitionException 발생
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]영한쌤 따라서 @Autowired 필드명 방법을 사용했더니 다음과 같은 에러가 발생했습니다. org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'orderServiceImpl' defined in file [C:\Program Files\core\core\out\production\classes\hello\core\order\OrderServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 1: No qualifying bean of type 'hello.core.discount.DiscountPolicy' available: expected single matching bean but found 2: fixDiscountPolicy,rateDiscountPolicy at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:798) at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:237) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1354) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1191) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:561) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:325) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:323) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:975) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:959) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:624) at org.springframework.context.annotation.AnnotationConfigApplicationContext.<init>(AnnotationConfigApplicationContext.java:93) at hello.core.scan.AutoAppConfigTest.basicScan(AutoAppConfigTest.java:14) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'hello.core.discount.DiscountPolicy' available: expected single matching bean but found 2: fixDiscountPolicy,rateDiscountPolicy at org.springframework.beans.factory.config.DependencyDescriptor.resolveNotUnique(DependencyDescriptor.java:218) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1420) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1353) at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:907) at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:785) ... 17 more아래는 제 코드입니다.에러 내용으로만 봐서는 rateDiscountPolicy와 fixDiscountPolicy 때문에 빈이 2개 등록된다는 것 같은데.. @Autowired 필드명 방법이 그러한 문제를 해결하려는 건데 왜 에러가 날까요ㅠㅠ
- 해결됨스프링 핵심 원리 - 기본편
강의에서 21:36 쯤에
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]영한쌤께서 fieldInjectionTest 테스트 코드를 만드실 때, new OrderServiceImpl() 로 OrderServiceimpl 객체를 생성하잖아요? 여기서 해당 객체는 스프링 빈으로 등록된 OrderServiceImpl이 아닌 그냥 완전히 새로 생성된 자바 객체인 OrderServiceImpl 인거죠??
- 미해결스프링 핵심 원리 - 기본편
3분 30초 경 오류 해결 부분
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요. 오류 로그 Failed to load ApplicationContext for [MergedContextConfiguration@65ae095c testClass = hello.core.CoreApplicationTests, locations = [], classes = [hello.core.CoreApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@4ef37659, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@306cf3ea, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@52102734, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@4d910fd6, org.springframework.boot.test.context.SpringBootTestAnnotation@930cd593], contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null]강의의 3분 30초 경 오류 코드를 수정하는 순서에서의 AutoAppConfig클래스의 3줄을 주석처리 하는 부분을 처리 하였는데도 오류가 떠서 GPT에 검색을 해보니까 주석 처리를 했는데도 memoryMemberRepository Bean이 두개가 등록이 되어있다고 나옵니다.AutoAppCofig 코드package hello.core; import hello.core.member.MemberRepository; import hello.core.member.MemoryMemberRepository; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.FilterType; @Configuration @ComponentScan( excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class) ) public class AutoAppConfig { // @Bean("memoryMemberRepository") // MemberRepository memberRepository() { // return new MemoryMemberRepository(); // } } MemberServiceImpl 코드package hello.core.member; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component; @Component public class MemberServiceImpl implements MemberService{ private final MemberRepository memberRepository; @Autowired // ac.getBean(MemberRepository.class) public MemberServiceImpl(MemberRepository memberRepository) { this.memberRepository = memberRepository; } @Override public void join(Member member) { memberRepository.save(member); } @Override public Member findMember(Long memberId) { return memberRepository.findById(memberId); } //테스트 용도 public MemberRepository getMemberRepository() { return memberRepository; } }MemberService 코드package hello.core.member; public interface MemberService { void join(Member member); Member findMember(Long memberId); } MemoryMemberRepository 코드package hello.core.member; import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Component; import java.util.HashMap; import java.util.Map; @Component public class MemoryMemberRepository implements MemberRepository{ private static Map<Long, Member> store = new HashMap<>(); @Override public void save(Member member) { store.put(member.getId(), member); } @Override public Member findById(Long memberId) { return store.get(memberId); } }