묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 핵심 원리 - 기본편
스프링 빈 조회 - 상속 관계 질문있습니다.
안녕하세요!강의에서 부모 타입으로 조회하면, 자식 타입도 함께 조회가 되기 때문에이럴 때, ac.getBean(DiscountPolicy.class) 로 조회하면, 위의 두 개가 조회된다고 설명해주셨는데요.그렇다면, 각각 RateDiscountPolicy와 FixDiscountPolicy 클래스는 DiscountPolicy에 자식 클래스로 보아도 되는 건가요?java에 완전히 익숙하진 않아서 일반적으로 상속한다는 것이 인터페이스의 구현에도 적용할 수 있는 개념인가 해서요..!인터페이스를 implements해서 구현하는 것도 상속하는 것이고, 그래서 부모 자식간의 관계가 성립하는 것으로 보면 될까요??또 질문은 현재 위의 config만 보면, bean으로 올라간 객체는 RateDiscountPolicy와 FixDiscountPolicy밖에 없는거죠?? DiscountPolicy 인터페이스 자체는 빈으로 등록되지 않는건가요..?원래 부모타입으로 조회하였을 때 자기 자신과 자식 타입들이 조회된다고 해서.. 3이라고 생각했는데,여기서는 빈으로 등록된 객체가 RateDiscountPolicy와 FixDiscountPolicy로 2개니까 해서요..그리고 이건 따로 궁금한 점인데, 인터페이스는 원래 빈으로 등록이 안되나요..??질문이 번잡스러워서 죄송합니다..ㅜㅜ
-
미해결스프링 핵심 원리 - 기본편
이런 설계에 대한 공부는 어떻게 해야 할까요...
강의에서 주문, 회원.... createrOdrer 하셔서 머리속에 있는 개발을 코드로 타타타탁 굉장히 쉽게 구현하시는것 같은데강의 보며 따라 치면 아 그렇구나 이해는 되지만막상 제가 뭘 개발하고자 하니 어떤 필드가 필요하고 어떤 매게변수가 필요하고... 감이 전혀 잡히질 않습니다. SI에서 개발자로 일을 하고 있는데 VO개발 방식이 아닌 Map으로 진행중이라 객체의 필드값이 아닌 ,화면에서 필요로 하는 값을 주고 받으니 점점 개발과 설계에 대해 자신감도 잃어가고 있습니다...
-
해결됨스프링 핵심 원리 - 기본편
UnsatisfiedDependencyException 관한 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'memberServiceImpl' defined in file [F:\study\spring-boot-study2\core\out\production\classes\springbootstudy2\core\member\MemberServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: No qualifying bean of type 'springbootstudy2.core.member.MemberRepository' available: expected single matching bean but found 2: memoryMemberRepository,memberRepository at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:802) at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:241) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1356) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1193) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:563) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:523) 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:973) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:946) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:616) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:455) at org.springframework.boot.SpringApplication.run(SpringApplication.java:323) 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:1442) 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 'springbootstudy2.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:1418) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1348) at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:911) at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:789) ... 41 more 현재 [옵션 처리] 수업까지 들으면서 'CoreApplicationTests'에서 에러가 발생하고 있습니다. 커뮤니티 및 인터넷에서 해당 문제에 대해서 파악을 하는데... MemberRepository와 DiscountPolicy의 스프링 빈 등록이 중복되어 나온다고 설정이 되어 있는 것 같습니다 그래서 MemoryMemberRepository 파일과 RateDiscountPolicy 파일에 @Primary 애노테이션을 넣어서 당장 정상적으로 돌아가는 것을 확인 후 문제는 없앴지만 근본적인 문제 해결로는 이해가 되지 않아서 도움을 요청하고자 글 남겼습니다.
-
미해결객체 지향 프로그래밍 입문
6분 26초에 말하는 객체의 안에 있는 프로시저란 객체의 메서드를 말하는건가요?
6분 26초에 말하는 객체의 안에 있는 프로시저란 객체의 메서드를 말하는건가요?
-
해결됨스프링 핵심 원리 - 기본편
AppConfig에 관한 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요 수업중에 의문점이 생겨서 질문드립니다. public class AppConfig { private MemberRepository memberRepository(){ return new MemoryMemberRepository(); } private DiscountPolicy discountPolicy(){ return new RateDiscountPolicy(); } public MemberService memberService(){ return new MemberServiceImpl(memberRepository()); } public OrderService orderService(){ return new OrderServiceImpl(memberRepository(),discountPolicy()); } }객체의 인스턴스를 만들때 이렇게 정의한것과public class AppConfig { private MemberRepository memberRepository = new MemoryMemberRepository(); private DiscountPolicy discountPolicy = new RateDiscountPolicy(); public MemberService memberService(){ return new MemberServiceImpl(memberRepository); } public OrderService orderService(){ return new OrderServiceImpl(memberRepository,discountPolicy); } }이렇게 정의했을때의 차이점이 있나요?제 생각에는 오히려 위의 경우가 Memberservice,Orderservice에서 memberRepository()를 두번 사용하니 new로 서로 다른 인스턴스가 생성되어 만약 memorymemberRepository의 저장소가 static이 아니라면 오류가 생길것 같은데 제 생각이 잘못된 것인지 궁금합니다,
-
해결됨스프링 핵심 원리 - 기본편
AutoAppConfigTest 오류
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'hello.core.Order.OrderServiceImpl' available at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:341) at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:332) at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1173) at hello.core.scan.AutoAppConfigTest.basicScan(AutoAppConfigTest.java:25) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) at java.base/java.lang.reflect.Method.invoke(Method.java:578) at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:727) at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156) at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147) at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86) at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103) at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93) at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92) at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:217) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:213) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:138) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:68) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:147) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:127) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:90) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:55) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:102) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:54) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53) at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:57) at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55)AppConfig에서 주석 처리도 했는데, 테스트 코드 실행시 왜 NoSuchBeanDefinitionException오류가 발생하는지 잘 모르겠습니다...
-
미해결김영한의 실전 자바 - 기본편
연산위치질문 있습니다.
객체 혹은 인스턴스는 실제 데이터가 저장된 메모리의 주소만 가지고있고, 실제 데이터는 메모리에 적재 된다 라고 이해했습니다. 맞을까요? 저장된 변수를 가져와 처리 (연산 등)을 하게 된다면 실제로 처리되는곳은 메모리상에서 데이터가 처리되는 것 일까요? 코드를 실행하면 컴파일러가 코드의 문법오류를 계산하고, class파일로 컴파일 한뒤 JVM 실행엔진에서 실행된다고 알고있는데, 데이터가 코드를 따라 연산되는곳은 실행엔진속 스택 혹은 힙 메모리 인가요?
-
해결됨김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
ScannerWhileEx4 문제 질문있습니다.
package scanner.ex; import java.util.Scanner; public class Ex1 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int option = 0; int sum = 0; while (option != 3){ System.out.print("1: 상품 입력, 2: 결제, 3: 프로그램 종료 "); option = scanner.nextInt(); if (option == 1){ scanner.nextLine(); System.out.print("상품명을 입력하세요: "); String name = scanner.next(); System.out.print("상품의 가격을 입력하세요: "); int price = scanner.nextInt(); System.out.print("구매 수량을 입력하세요: "); int count = scanner.nextInt(); System.out.println("상품명 " + name + "가격 " +price + "수량 "+ count); sum += price * count; } else if (option == 2){ System.out.print("총 비용: " +sum); }else { System.out.println("올바른 옵션을 선택해 주세요."); } } System.out.println("프로그램을 종료합니다."); } }제가 작성한 코드값에서 항상 총비용이 +1이 되어있는데 어떤문제가 있는지 알 수 있을까요?
-
미해결스프링 핵심 원리 - 기본편
@AutoWired로 스프링 빈이 2개일때
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]수업시간에 같은 타입이 2개일때 @AutoWired의 파라미터나 필드명으로 매칭하실 수 있다고 하셨는데요렇게 rateDiscountPolicy로 바꾸고 AutoAppConfigTest의 basicScan()을 돌렸는데<오류 코드>org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'orderServiceImpl' defined in file [C:\Spring\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 똑같이 UnsatisfiedDependencyException 오류가 나네요 ㅜㅜ
-
미해결스프링 핵심 원리 - 기본편
XmlAppContext() 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 오류 로그는 다음과 같습니다. org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [appConfig.xml] at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:351) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:319) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:184) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:220) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:191) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:253) at org.springframework.context.support.GenericXmlApplicationContext.load(GenericXmlApplicationContext.java:130) at org.springframework.context.support.GenericXmlApplicationContext.<init>(GenericXmlApplicationContext.java:70) at hello.core.xml.XmlAppContext.XmlAppContext(XmlAppContext.java:14) 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: java.io.FileNotFoundException: class path resource [appConfig.xml] cannot be opened because it does not exist at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:215) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342) ... 11 more ```class path resource에서 appConfig.xml을 찾을 수 없다고 하는데, 보시는 바와 같이 있습니다. 참고로 테스트 코드도 다음과 같습니다. package hello.core.xml; import hello.core.member.MemberService; import org.junit.jupiter.api.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.GenericXmlApplicationContext; import static org.assertj.core.api.Assertions.assertThat; public class XmlAppContext { @Test void XmlAppContext() { ApplicationContext ac = new GenericXmlApplicationContext("appConfig.xml"); MemberService memberService = ac.getBean("memberService", MemberService.class); assertThat(memberService).isInstanceOf(MemberService.class); } } ``` 어떤 부분이 문제일까요...
-
미해결스프링 핵심 원리 - 기본편
콘솔에 스프링 실행 시 로그가 안뜹니다.
안녕하세요 스프링 3.2.0을 쓰고 있습니다.강사님처럼 스프링 실행 시이러한 로그들이 안뜨고, MemberApp이나 OrderApp을 실행하면이런식으로 뜨는데 스프링 버전 차이에서 오는 것일까요..?교안에도 이렇게 나와있어서요. 감사합니다.
-
미해결스프링 핵심 원리 - 기본편
질문있습니다.
조회한 빈이 모두 필요할 때 List,Map을 이용하는 문제입니다. package hello.core.autowired; import hello.core.AutoAppConfig; import hello.core.discount.DiscountPolicy; import hello.core.member.Grade; import hello.core.member.Member; import org.junit.jupiter.api.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import java.util.List; import java.util.Map; import static org.assertj.core.api.Assertions.assertThat; 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); } } } 여기서 policyMap과 List에 주입되는 과정이 이해가 안갑니다. Map은 왜 <String,DiscountPolicy>로 정의했고 List는 <DiscountPolicy>로 정의 했는지, 그리고 여기에 어떻게 Ratediscountpolicy와 Fixdiscountpolicy가 들어갔는지 궁금합니다.
-
해결됨스프링 핵심 원리 - 기본편
컴포넌트 스캔 시 빈 중복 에러 발생
안녕하세요! 섹션 6 중 컴포넌트 스캔과 의존관계 자동 주입하기 강의 관련 질문 드립니다.OrderServiceImpl@Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DisountPolicy disountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, DisountPolicy disountPolicy) { this.memberRepository = memberRepository; this.disountPolicy = disountPolicy; } ... }(DisountPolicy 는 처음 클래스 명 설정할 때 오타가 나서 그냥 그대로 쭉 사용하고 있습니다..) AutoAppConfig를 생성한 후 각 클래스에 @Component 어노테이션을 붙여줬고, OrderServiceImpl 클래스에 @Autowired를 통해 의존 관계를 주입하는 과정에서Could not autowire. There is more than one bean of 'DisountPolicy' type.Beans:discountPolicy (AppConfig.java)rateDiscountPolicy (RateDiscountPolicy.java) 에러가 발생합니다. 원인을 찾아보니 같은 타입의 빈이 여러 개 존재해서 발생하는 에러라고 하는데, 제 코드에서 어떤 부분이 잘못된건지 모르겠어서 질문 드립니다.. AutoAppConfigpackage Hello.core; 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 { } AppConfig@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()); } @Bean public DisountPolicy discountPolicy() { return new RateDiscountPolicy(); } }
-
해결됨김영한의 실전 자바 - 기본편
객체 향상된 for문 질문있습니다.
package class1.ex; public class MovieReviewMain2 { public static void main(String[] args) { MovieReview[] reviews = new MovieReview[2]; MovieReview inception = new MovieReview(); inception.title = "인셉션"; inception.review = "인생은 무한 루프"; reviews[0] = inception; MovieReview aboutTime = new MovieReview(); aboutTime.title = "어바웃 타임"; aboutTime.review = "인생 시간 영화"; reviews[1] = aboutTime; for (MovieReview review : reviews) { System.out.println("영화 제목: " + review.title + ", 리뷰: " + review.review); } } }MovieReview inception이라는 변수를 통해서 .(dot)으로 실제객체에 접근하는 것으로 알고 있습니다. 그러나, 향상된 for문에서는 MovieReview(클래스) 다음에 오는 review를 통해서 접근하여 영화제목과 리뷰를 출력하는 것으로 보입니다.여기서 질문이 있습니다.for(MovieReview review : reviews)이 구문에서 review는 어디서 온것인가요?review가 참조값에 접근할 수 있는 상세한 이유는 무엇일까요?답변부탁드립니다!
-
해결됨김영한의 실전 자바 - 기본편
개인적으로 궁금한건데 선생님 키보드 정보가 궁금합니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.키보드 정보가 궁금합니다. 현재 맥북으로 공부중인데, 맥북과 호환되는 키보드 정보가 궁금합니다
-
미해결스프링 핵심 원리 - 기본편
coreapplication 실행시 로그
coreapplication 실행시 콘솔창에 이렇게 debug 로그들이 많이 뜨는데 강의 영상 1:26 처럼 INFO 로그들만 나오게 하려면 어떻게 해야 하나요?
-
미해결스프링 핵심 원리 - 기본편
@Autowired 필드 명, @Qualifier, @Primary 강의중인데요
@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; } 2:50초 쯤에서 DiscountPolicy 의 변수를 rateDicountPolicy 로 변경을 하는 내용이 나오거든요 그리고 테스트를 돌리는데 성공하시더라구요 그런데 저는 여기서 아래에러가 발생해서요 org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'orderServiceImpl' defined in file [C:\Users\kkk\Downloads\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매칭이 안된것 같은데 어떻게 해야 할지 문의 드립니다.
-
미해결스프링 핵심 원리 - 기본편
policyMap과 policies에 계속 null 값이 들어갑니다.
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요. 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; @Autowired 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); return discountPolicy.discount(member, price); } } }@Component public class FixDiscountPolicy implements DiscountPolicy { private int discountFixAmount = 1000; @Override public int discount(Member member, int price) { if (member.getGrade() == Grade.VIP) { return discountFixAmount; } else { return 0; } } }@Component public class RateDiscountPolicy implements DiscountPolicy { private int discountPercent = 10; @Override public int discount(Member member, int price) { if (member.getGrade() == Grade.VIP) { return price * discountPercent / 100; } else { return 0; } } }public interface DiscountPolicy { /** * * @return 할인 대상 금액 */ int discount(Member member, int price); }@Configuration @ComponentScan( basePackages = "spring.springCoreBasic.member", excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class) ) public class AutoAppConfig { }
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
제네릭스가 실제로 쓰이는 예시
sts로 mvc 하다가 다시 강의듣기 시작해서 그런지 헷갈려서요. 제네릭스는 어느 경우에 쓰이는 건가요? 프로젝트 할때 HashMap을 썼던 것 같거든요. Controller - jsp (ajax)@ResponseBody@PostMapping("/admin/bmember")public Map<String, Object> bmemberPost(@RequestBody ManagerVO manager){ Map<String, Object> map = new HashMap<String, Object>(); boolean res = managerService.updateManager(manager); // 승인 -> 업데이트 -> bm_approval( 0 -> 1 ) // 동시에 getMakeStore 를 하면서 st_num을 만들고, bm_id값만 넘겨주고, st_approval default값 0이 주어짐 -> storeVO 데이터 저장! boolean store = storeService.makeStore(manager); // 상점등록 - (st_num) st_bm_id를 이용해서 insert // => 매장등록 (plusinfo) insert -> update 로 변경. // map.put("store", store); // 화면단에 store정보를 보낼 필요는 없음. 그냥 일만하러 왔다. map.put("res", res); return map; }
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
변수가 초기화 되었는지 확인하는게 JIT컴파일러 인가요?
변수가 초기화 되었는지 확인하는게 JIT컴파일러 인가요?