묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결김영한의 실전 자바 - 기본편
인텔리제이
자바 인텔리제이에서 분명 전 다른 패키지에 클래스를 만들고 다른 complie 했는데, 이전 다른 패키지에서 연습한 코드에서 에러가 났다고 뜨면서 코드 실행이 안되는데, 이럴때 유용한 방법이 있나요?
-
미해결김영한의 실전 자바 - 기본편
메서드 영역
여기 이 두 표현이 모순적인 것 같은데, 인스턴스 안에 메서드를 가지는게 맞나요? 어떤 의미에서 각각의 인스턴스가 '내부' 에 메서드를 가진다고 표현되어 있는건지 이해가 잘 안돼요
-
미해결스프링 핵심 원리 - 기본편
강의 내용에 나오는 부분을 추가 학습하고 싶은데 어떤 강의를 들어야 할까요?
쓰레드에 관한 개념을 서칭하는데 한계가 있어, 멀티 쓰레드 관련하여 강의를 듣고싶습니다.스프링 로드맵을 따라가고 있는데 이에 대한 설명이 나오는 부분이 있을까요?아니면 김영한 강사님의 자바 강의에 따로 설명이 되어있다면 어떤 강의인지 알려주셨으면 좋겠습니다 ㅠㅠ
-
미해결스프링 핵심 원리 - 기본편
해당 클래스 빈 조회 방법
스프링 컨테이너는 생성자에 클래스 정보를 받습니다. 여기에 클래스 정보를 넘기면 해당 클래스(SingletonBean)가 스프링 빈으로 자동 등록됩니다.여기서 등록된 빈을 조회하려고 하는데 저렇게 name을 singletonBean으로 조회하면 등록된 빈을 찾을 수 없다고 오류가 납니다. 빈 이름으로 조회하고 싶은데 무엇으로 조회해야하나요?
-
미해결스프링 핵심 원리 - 기본편
통합 테스트를 돌리면 오류가 발생합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 영한님 수업을 따라가면서 전체테스트를 돌릴때 CoreApplicationTest의contextLoads()에서 java.lang.IllegalStateException: Failed to load ApplicationContext for [MergedContextConfiguration@46963479 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@208e9ef6, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@34448e6c, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@7dc51783, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@3a43d133, org.springframework.boot.test.context.SpringBootTestAnnotation@1b8b1ee9], contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null]at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:180)at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130)at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:142)at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:98)at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163)at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1708)at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310)at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735)at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734)at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762)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)Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'memberServiceImpl' defined in file [C:\SpringStudy\core\out\production\classes\hello\core\member\MemberServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: No qualifying bean of type 'hello.core.member.MemberRepository' available: expected single matching bean but found 2: memoryMemberRepository,memberRepositoryat 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.boot.SpringApplication.refresh(SpringApplication.java:754)at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456)at org.springframework.boot.SpringApplication.run(SpringApplication.java:334)at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137)at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58)at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46)at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1454)at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:552)at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137)at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108)at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:225)at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:152)... 17 moreCaused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'hello.core.member.MemberRepository' available: expected single matching bean but found 2: memoryMemberRepository,memberRepositoryat 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)... 41 more오류가 발생하였습니다. 해결하는법을 찾지 못해 넘기고 다음 동영상 수업을 들으면서 2분29초 부분의 고의적으로FixDiscountPolicy클래스도 @Component를 등록하여 오류를 발생시킨 뒤 OrderServiceImpl클레스의 생성자에서 ratediscountPolicy로 변경하면 오류가 사라진다는 설명을 듣고 따라해도 오류가 발생되어 해결을 하지 못하고 있습니다. 어떻게 해야하나요?
-
해결됨스프링 핵심 원리 - 기본편
[섹션 7-5] 같은 타입의 빈이 2개일 때 문제
[문제 상황]이전에는 컴포넌트 스캔의 대상으로 RateDiscountPolicy 만 등록해줬지만, FixDisCountPolicy에 @Component를 추가해서 컴포넌트 스캔의 대상으로 만들어줬습니다.그래서 같은 타입이 2개 이상일 때 @Autowired를 사용하면 오류가 발생해서 필드명을 빈 이름으로 변경하는 방법을 쓰기 위해 OrderServiceImpl의 코드를 아래와 같이 수정했습니다.OrderServiceImpl의 코드@Component public class OrderServiceImpl implements OrderService{ private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; public OrderServiceImpl(MemberRepository memberRepository,DiscountPolicy rateDiscountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = rateDiscountPolicy; } 그리고 나서 아래의 테스트를 진행한 결과 ... AutoAppConfigTest public class AutoAppConfigTest { @Test @DisplayName("컴포넌트 스캔해서 스프링 빈 등록하기") void basicScan(){ AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class); MemberService memberService = ac.getBean(MemberService.class); assertThat(memberService).isInstanceOf(MemberService.class); } } AutoAppConfigTest 뿐만 아니라 CoreApplicationTests도 오류가 발생했습니다. 그리고 각각의 오류 메세지는 다음과 같습니다. AutoAppConfigTest 오류메세지 org.springframework.beans.factory.UnsatisfiedDependencyException:Error creating bean with name 'orderServiceImpl' defined in file [...\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 CoreApplicationTests 오류메세지 Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException:Error creating bean with name 'memberServiceImpl' defined in file :Unsatisfied dependency expressed through constructor parameter 0:No qualifying bean of type 'hello.core.member.MemberRepository' available:expected single matching bean but found 2: memoryMemberRepository,memberRepository OrderServiceImpl 의 코드에서 rateDiscountPolicy로 코드를 수정했음에도 왜 빈을 구분 할 수 없다는 오류가 발생한 것이고 , CoreApplicationTests는 왜 오류가 발생한 것 일까요? 참고로 @Qualifier과 @Primary 를 사용하면 AutoAppConfigTest 는 성공하고CoreApplicationTests만 실패합니다 !! 아래는 CoreApplicationTests만 실패시 오류 메세지 입니다. Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException:No qualifying bean of type 'hello.core.member.MemberRepository' available:expected single matching bean but found 2: memoryMemberRepository,memberRepository [질문 사항] @Autowired 매칭을 할 때 필드명, 파라미터 명으로 매칭 되어야하는데 왜 이름을 바꿨는데도 매칭이 안될까요?? AutoAppConfig의 오류는 Discount 타입을 임의로 두 개 설정해줘서 발생한 것이지만 CoreApplicationTests는 왜 오류가 발생한 걸까요?제 생각엔 수동으로 빈을 등록해주는 코드가 실행돼서 수동 빈들이 등록된 것같은데AutoAppConfig 클래스에서 @Configuration 어노테이션이 있으면 빈으로 등록되지 않게 필터도 설정했고, 테스트를 진행하며 작성한 코드도 모두 지워줬는데 왜 memberRepository가 빈으로 등록 되었을 까요?
-
해결됨스프링 핵심 원리 - 기본편
MemberApp과 AppConfig 분리 이유 질문
1.AppConfig와 MeberApp를 분리한 이유를 잘 모르겠습니다. MemberApp에서 MemberService의 구현체 확인이 안되고 확인하려면 다시 AppConfig를 열어야하는데, 분리한 이유가 있나요?(예제 코드이다 보니깐 AppConfig의 장점이 와닿지가 않네요..현재로선 득보다 실이 더 큰 느낌이 들어요)2. MemberApp의 역할의 경계를 어디까지 잡는지 잘 모르겠습니다.
-
미해결김영한의 실전 자바 - 기본편
자바 클래스 배열과 C/C++의 이중포인터
강사님! 클래스 배열을 힙메모리에 할당하고, 할당된 힙 영역의 클래스배열 각각의 인덱스가 객체를 가리키는 것은C++에서 힙영역의 클래스 배열을 가리키는 이중포인터힙 영역에서 생성된 클래스 배열에서 각각의 인덱스는 객체를 가리키는 단일포인터로 저는 이해를 했는데 맞을까요?
-
해결됨스프링 핵심 원리 - 기본편
ApplicationContext 필드주입 질문입니다
applicationContext를 필드 주입 받는 부분입니다ApplicationContext가 컨테이너 라고 알고있는데 맞나요?그러면 ApplicationContext 컨테이너에 PrototypeBean이 등록되어야 getBean(PrototypeBean.class) 를 할 수 있는 거 아닌가요? PrototypeBean을 빈으로 등록하지 않았는데 가능한 이유가 궁금합니다. 혹시 아래 부분에서 PrototypeBean이 등록되는 건가요? 동작원리(순서)가 궁금합니다 AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(ClientBean.class ,PrototypeBean.class);
-
미해결스프링 핵심 원리 - 기본편
List 인터페이스 질문
강의를 다듣고 궁금한점이 생겼는데요. List와 ArrayList도 결국 인터페이스와 구현체 관계인데, 자료형으로 주로 사용될지라도 실상은 memberRepository처럼 데이터를 넣고 조작하는건 똑같은데,코드에 List<Integer> list = new ArrayList<>();가 추가 되면, List<Integer> list; 처럼 바꿔줘야 하나요? 2.이런 인터페이스들도 클래스 다이어그램에 포함되는지도 궁금합니다. 1번과 비슷한 내용인데, List도 추후에 배울 @Bean 처리를 하기도 하나요?
-
미해결김영한의 실전 자바 - 기본편
다형성에서 클라이언트가 의미하는게 무엇인지 궁금합니다.
다형성의 본질은 클라이언트를 변경하지 않고, 서버의 구현한 기능을 유연하게 변경할 수 있다라고 하셨는데 여기서 말하는 클라이언트는 결국 Car와 같이 기본이 되는 인터페이스를 의미하는건가요?
-
미해결스프링 핵심 원리 - 기본편
객체의 생성과 초기화 분리
강의에서 객체의 생성과 초기화를 분리하라고 하셨는데, NetworkClient networkClient = new NetworkClient();이 부분에서는 객체를 생성과 동시에 초기화 해주는 것인가요? (초기화: connect(), call() 이 맞나요?) 그럼 분리가 안된 것인가요? setUrl 은 초기화 하는 건가요 아니면 객체 생성과정으로 생각해야하나요?networkClient.setUrl("https://test.dev"); 강의에서 든 예제는 객체 생성과 초기화가 분리가 된 것인지, 분리가 안된 것인지 헷갈립니다. 분리가 되었다면 어떤식으로 분리가 되었는지, 아니라면 어느부분이 문제인지 궁금합니다.!
-
해결됨스프링 핵심 원리 - 기본편
contextLoads() 테스트 실패
CoreApplicationTests 속 contextLoads() 테스트를 실행하였는데 java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@3f9f71ff 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@35aea049, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@3b6ddd1d, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@2f217633, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@6fd83fc1, org.springframework.boot.test.context.SpringBootTestAnnotation@8daef27a], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:180) at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130) at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191) at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130) at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260) at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163) at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310) at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735) at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762) at java.base/java.util.Optional.orElseGet(Optional.java:364) 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.UnsatisfiedDependencyException: Error creating bean with name 'memberServiceImpl' defined in file [C:\Users\김승빈\Desktop\김 영 한\Spring_Core_Basic\core\out\production\classes\hello\core\member\MemberServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: No qualifying bean of type 'hello.core.member.MemberRepository' available: expected single matching bean but found 2: memoryMemberRepository,memberRepository 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.boot.SpringApplication.refresh(SpringApplication.java:754) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) at org.springframework.boot.SpringApplication.run(SpringApplication.java:334) at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137) at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58) at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46) at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1454) at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:552) at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137) at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:225) at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:152) ... 17 more Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'hello.core.member.MemberRepository' available: expected single matching bean but found 2: memoryMemberRepository,memberRepository 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) ... 41 more 이런 오류가 나면서 실패합니다. 왜 이런가요? 참고용으로 AutoAppConfig 와 AppConfig 코드 입니다.AutoAppConfig package hello.core.order; 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(name = "memoryMemberRepository") public MemberRepository memberRepository() { return new MemoryMemberRepository(); } */ } AppConfig 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 memberService -> MemoryMemberRepository() //@Bean orderService -> MemoryMemberRepository() //call AppConfig.memberService //call AppConfig.memberRepository //call AppConfig.memberRepository //call AppConfig.memberService //call AppConfig.memberRepository //call AppConfig.memberService //call AppConfig.memberRepository //call AppConfig.memberService @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()); } @Bean public DiscountPolicy discountPolicy() { // return new FixDiscountPolicy(); return new RateDiscountPolicy(); } }
-
해결됨C개발자를 위한 최소한의 C++
R-value 참조에 대해서 질문이 있습니다.
r-value 참조에 대해서 질문이 있습니다. (02-rvalueRef 예제 강의 기준 r-value 참조 (임시 객체와 유효범위) 8분)코드를 포인터를 볼 수 있게 조금 수정했습니다.int testFunc(int param){ int result = param * 2; std::cout << &result << std::endl; return result;}int&& result = testFunc(10); std::cout << result << "pointer: " << &result << std::endl;임시 객체의 주소를 지우지 않고 가져다 쓰는것이라 하셔서 testFunc 함수의 return 하는 result 의 포인터를 확인 후 받는 result의 포인터가 같은지를 확인해 보았습니다. print된 2개의 result의 포인터 값이 다른 것을 확인했습니다. 혹시 임시 객체라는 것이 함수의 return result 값을 또 다른 포인터로 옮긴 뒤 받기 때문에 return result와 다르게 되는건가요?
-
미해결김영한의 실전 자바 - 기본편
스택 구조
만약 method2() 가 method1() 내부에서가 아니라 제가 화살표 친 부분 즉, method1() 다음 줄에 emthod2(8) ; 이렇게 적혀 있으면 스택에는 아래서부터 main mehtod , method1, method2 순으로 쌓이는건가요? 근데 윗줄부터 실행하면 method1 이 method2 보다 우선적으로 실행하는거 아닌가요 ? 제가 아는 스택 구조라면 method2() , method1() , main method() 순으로 종료가 되어야 하는데, 제가 말한 식으로 있을때에는 성립하지 않는 것 같습니다.
-
미해결김영한의 실전 자바 - 기본편
자바 중급 강의 언제쯤..
자바 중급 강의 언제나오나요..ㅠㅠ강의 다들었습니다..3월초에 일단 완성된 강의 만이라도 먼저 올려주시고 추가되는 강의 후에 넣어주실수없나요ㅠㅠ
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
퀴즈 13 질문
FileWriter fw = new FileWriter("saying.txt"); BufferedWriter bw = new BufferedWriter(fw);복습 차원에서 파일 생성하고 작성 하는 것 까지 한번 해봤는데요.위 부분에서 앞선 강의에선 윗줄과아랫줄을 합쳐서 BufferedWriter bw = new BufferedWriter(new FileWriter("saying.txt"));이렇게 만들고 이것을 TryWithResources 방법으로 구현하는 방법을 배웠는데, TryWithResources방법이 기억이 안 나서 try { BufferedWriter bw = new BufferedWriter(new FileWriter("saying.txt")); bw.write("세 살 __ 여든까지 간다"); bw.newLine(); // . // . // . } catch (IOException e) { throw new RuntimeException(e); }이렇게 전체를 트라이캐치 구문으로 묶어 버렸어요. 실행 해보니 파일에 글자가 아예 안 찍히더라고요. TryWithResources방법을 안 써도 글자는 찍힐 거라고 생각했는데 왜 안 찍히는 것일까요.
-
미해결스프링 핵심 원리 - 기본편
DiscountPolicy는 인터페이스인데 .class가 붙는 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]1. code 일부분 ac.getBeansOfType(DiscountPolicy.class);2. 궁금한점DiscountPolicy는 인터페이스인데 .class가 붙는 이유가 메타데이터에 접근하기위해서 '.class'가 붙는것인가요?
-
미해결스프링 핵심 원리 - 기본편
빈 등록 초기화, 소멸 메서드
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 종료 메서드 추론에 대해서 강의해주실 때,@Bean 의 destoryMethod의 기본값이 inferred 추론으로 등록되어 있는데, 이 추론 기능이 close, shutdown이라는 이름의 메서드를 자동 호출해준다. "직접 스프링 빈으로 등록하면, 종료 메서드는 따로 적어주지 않아도 잘 동작한다" 라는 말이 이해가 되지 않아서 질문을 남깁니다. 혹시 쉽게 설명이 가능할까요?
-
미해결스프링 핵심 원리 - 기본편
@beforeEach 사용 여부에 따른 차이점
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]@BeforeEach를 사용한 것과 사용하지 않은 것의 코드입니다.현재 강의까지를 범위로 놓고 보았을 때 테스트 하는 부분이 join하나밖에 없어서 큰 문제가 되진 않겠지만 스프링 입문에서도 설명하셨던 것과 같이 테스트를 계속 실행하면 그 데이터가 누적이 되면서 테스트 실패가 날 수 있기 때문에 @BeforeEach와 @AfterEach를 활용해야한다고 하셨었는데 그 이유 때문에 저렇게 쓰신 것이 맞을까요?