월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링 핵심 원리 - 기본편
필드 주입의 순환 참조 탐지 시기
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]안녕하세요 강의를 듣고 관련 질문들을 찾아보아도 해결되지 않아 문의 남깁니다.스프링에서 생성자 주입을 사용하는 경우 스프링 컨텍스트가 시작하며 순환 참조를 탐지하고 예외를 발생시키는 것으로 알고 있습니다. 그래서 이를 피하기 위해 좋지 않은 예시인 것은 알지만 필드 주입 or setter 주입을 사용할 수 있는 것으로 알고 있습니다.헌데 코드처럼 필드 주입을 통해 AService가 BService의 객체를 필드 주입으로 설정하고, BService 또한 AService의 객체를 필드 주입하도록 설정했습니다. 이 때, 스프링 컨텍스트가 시작되며 해당 순환 참조와 관련된 메소드 호출이 일어나기 전에 스프링이 미리 이를 감지하고 예외를 던져버리는데 제가 이해한 내용이 잘못된 것인지 의문이 생깁니다... IDE는 인텔리제이를 쓰고 있고, 스프링부트 버젼은 2.7.8입니다@Controller public class TestController { @Autowired private AService aService; @GetMapping("/test") public void test() { } } @Service public class AService { @Autowired private BService bService; @Transactional public void test() { ; } } @Service public class BService { @Autowired private AService aService; @Transactional public void test2() { } }
- 미해결스프링 핵심 원리 - 기본편
인텔리제이 단축키 질문있습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]스프링 빈 조회 - 상속 관계 강의의 4:33분에 보면 현재 커서 기준으로 해당 라인의 끝까지 한번에 선택이 되는 단축키가 궁금해서 질문드립니다. (참고로 관련된 질문을 찾아본 후 윈도우에서 ctrl + shift + 방향키를 하면 된다는 답변을 봤지만 한번에 선택되지 않고 일부만 선택됩니다.)
- 미해결스프링 핵심 원리 - 기본편
Qulifier을 위한 어노테이션 사용시 유지보수 비용
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 강의 내용 중 나온 애노테이션을 만들게 되면 Qualifier("mainDiscountPolicy") 부분을 제외한 다른 코드는 스프링의 Qualifier 코드를 복붙하여 어노테이션들(@Target, @Retention 등)을 참조해서 사용하게 되는데요. spring의 Qualifier 어노테이션이 변경될 때 선언해놓았던 모든 코드를 수정해야하고, 코드 중복이 많이 발생할 것으로 생각했씁니다. 즉, 이런 어노테이션이 수십개 된다면 유지보수 비용이 올라갈 것으로 생각이 되었습니다@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented @Qualifier("mainDiscountPolicy") public @interface MainDiscountPolicy { } @Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented @Qualifier("QualifierAnnotation1") public @interface QualifierAnnotation1 { } @Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented @Qualifier("QualifierAnnotation2") public @interface QualifierAnnotation2 { } ... 사용해야하는 이유로 두 가지를 들어주셨는데요.해당 어노테이션이 참조되는 곳을 알 수 있다.mainDiscountPolicy 는 문자열이라 직접 치는 거보다 어노태이션이 낫다.위와 같은 이유라면 아래와 같은 Qualifier 전용 상수를 제공하여 해당 값을 사용하도록 하면, 언급한 두가지 이유도 동일하고 어노태이션 생성을 위한 불필요한 코드 중복 및 유지보수가 줄어들 거 같은데요.public class QualifierConst { public static final String MAIN_DISCOUNT_POLICY = "mainDiscountPolicy"; } // 사용하는 곳에서 @Qualifier(QualifierConst.MAIN_DISCOUNT_POLICY) 강의 중에 이야기하신 부분 외에 어노테이션을 실무에서 사용하는 다른 이유가 있을까요? 언급하신 이유와 어노테이션의 유지보수성을 고려했을때 Qualifier value들을 상수로 관리하는 것이 유지보수 비용이 더 적을 것으로 생각되어 질문 남깁니다.
- 미해결스프링 핵심 원리 - 기본편
OrderServiceTest 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.오류가 발생 하는데 어떤 이유인지 잘 모르겠습니다ㅠㅠㅠ
- 미해결스프링 핵심 원리 - 기본편
OrderServiceImpl return 값 오류
[질문 내용]return 값이 자꾸 오류가 발생합니다. springboot 버전은 3.1.7 이고 java 버전은 17입니다.
- 해결됨스프링 핵심 원리 - 기본편
필드 주입을 사용하면 안되는 이유와 @Autowired의 관계
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강의에서 의존관계 자동 주입의 방법 중 필드 주입의 방법은 스프링에 의존적인 방식이기 때문에 안티 패턴이므로 사용하지 말라고 하셨습니다. 제가 의문인 부분은 세가지입니다.강의 자료에 참고: 순수한 자바 테스트 코드에는 당연히 @Autowired가 동작하지 않는다. @SpringBootTest 처럼 스프링 컨테이너를 테스트에 통합한 경우에만 가능하다. 라고 적혀있는데, 이 말은 @Autowired 애너테이션을 사용한 의존성 주입 방법 자체가 스프링 의존적인건가요? 그게 아니라면 필드 주입이라는 방법 자체가 스프링 의존적인건가요? 만약 그렇다면 필드 주입 방법만 스프링 의존적인 이유가 따로 있을까요? 다른 방식들과 내부 동작 등에서 어떤 차이가 있는지 이해가 잘 가지 않아서요.만약 @Autowired 방법 자체가 스프링 의존적인 방식인거라면, 의존관계 자동 주입의 네 가지 방법 모두 스프링 의존적인 방식이므로 안티패턴이 되는것이 아닌가요? 왜 꼭 순수 자바 환경에서 테스트를 해야하나요? 스프링부트테스트는 스프링부트 환경에서 테스트할 수 있는걸로 알고있는데, 여기서 모든 테스트를 하면 되는 것 아닌가요??
- 미해결스프링 핵심 원리 - 기본편
섹션 7 옵션처리 부분 contextLoads() 오류
전체 test를 run하는 과정에서 java.lang.IllegalStateException: Failed to load ApplicationContext for [MergedContextConfiguration@6a48a7f3 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@791cbf87, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@2b52c0d6, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@7de0c6ae, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@cf65451, org.springframework.boot.test.context.SpringBootTestAnnotation@f29fb3dd], 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:141) at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:97) 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 [/Users/asungkim/Desktop/My folder/My coding/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:802) at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:241) 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:960) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:762) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:464) 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:1458) 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,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:911) at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:789) ... 41 more이런 오류가 뜹니다 어떻게해결하나요
- 해결됨스프링 핵심 원리 - 기본편
섹션 9 - 빈 스코프의 Singleton에서 Prototype을 사용할 때 관리주체는?
프로토타입 스코프 - 싱글톤 빈과 함께 사용시 Provider로 문제 해결위 강의에서는 Singleton Bean에서 필드 객체로 Prototype를 사용해야 할 경우를 알려주고 있는데, 이전 강의에서는 Prototype의 관리 주체는 Di를 통해 가져올 경우 Spring Container라고 했으나, 결국 Bean에서 Dependency Lookup을 통해 객체를 생성할 경우 관리 주체는 Prototype이기 때문에 개발자가 Prototype Bean의 관리주체가 된다고 했습니다. 이 때, Spring Container가 아닌 개발자가 직접 Prototype Bean을 관리한다는 것은 어떤것인지, 그리고 실제 Prototype Bean을 관리하는 상황을 몇가지 듣고싶습니다.
- 미해결스프링 핵심 원리 - 기본편
인텔리제이 무료 진행
인텔리제이 IDE 설치하려 하는데요.대학생은 신청하면 무료라고 해서 제 학교계정을 입력하고 진행하려했습니다.이런식으로 뜨면서 더이상 진행이 안되서 일단 저 기업에 제 재학증명서를 원서로 보내놓은 상태인데요.이렇게 뜨는게 지금 저만의 문제인지 어떻게 해결할 수 있는건지 궁금합니다.
- 해결됨스프링 핵심 원리 - 기본편
CoreApplication 실행시 오류가 발생합니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]The bean 'memoryMemberRepository', defined in class path resource [hello/core/AutoAppConfig.class], could not be registered. A bean with that name has already been defined in file [C:\Users\ekore\OneDrive\바탕 화면\spring\스프링 핵심원리 - 기본편\study\core\out\production\classes\hello\core\member\MemoryMemberRepository.class] and overriding is disabled.오류가 발생하여 커뮤니티 질문대로MemoryMemberRepository 클래스의 @Component지웠더니 Parameter 0 of constructor in hello.core.member.MemberServiceImpl required a single bean, but 2 were found:- memberRepository: defined by method 'memberRepository' in class path resource [hello/core/AppConfig.class]- memoryMemberRepository: defined by method 'memberRepository' in class path resource [hello/core/AutoAppConfig.class]오류가 발생합니다.
- 미해결스프링 핵심 원리 - 기본편
static을 붙이면 싱글톤이 깨지는이유
제가 실수로 메서드에 static을 붙였는데 MemberServiceImpl과OrderServiceImpl의 주소값이 다르게 나오더라구요 이유가 뭔가요?@Bean public static MemberRepository memberRepository() { return new MemoryMemberRepository(); } 결과값:memberRepository = helllo.core.member.MemoryMemberRepository@5a755cc1memberRepository1 = helllo.core.member.MemoryMemberRepository@7ae42ce3
- 미해결스프링 핵심 원리 - 기본편
조회 빈이 2개 이상일 때 우선순위를 설정하는 3가지 방법이 객체 지향적인 방법인가? 라는 의문점
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 의존관계 자동 주입 파트를 수강하고 있는 김민희입니다.다름이 아니라 이번 섹션을 들으며 궁금한 점을 질문드리고 싶습니다. 아래부터는 저의 질문 내용인데, 혼자서 메모장에 의문인 부분을 정리한 것을 복사해온 것이라 경어체가 아닌 점을 양해 부탁드립니다.=====================================조회된 빈이 2개 이상일 때 사용할 수 있는 방법은 총 3가지가 있다고 하셨다.- @Autowired 필드 명 매칭Service 코드에서 생성자의 파라미터 이름, 필드 이름을 조회된 빈 들중 사용할 빈의 이름으로 변경해줌 → service 코드 수정- @Qualifier 사용서브 이름을 설정해주는 것.컴포넌트에 서브 이름을 설정해주고, Service 코드에서 생성자의 파라미터를 입력할 때 그 서브이름을 같이 적어줌 → service 코드 수정- @Primary 사용조회되는 빈이 2개 이상이 될 때, 우선순위를 가질 컴포넌트에 @Primary를 지정함 → 컴포넌트 코드 수정 이 세가지 방법 다, 만약 사용할 빈이 달라진다면 코드를 변경해야 하는 방법이다.우리 예제를 예로 들자면, rateDiscountPolicy와 fixDiscountPolicy 둘 다 빈 등록을 해놓고, OrderServiceImpl에서 discountPolicy를 호출할 때 rateDiscountPolicy를 사용하다가, 나중에 비즈니스 로직이 바뀌어서 fixDiscountPolicy를 사용해야 하는 것으로 바뀐다면…세 가지의 방법 모두 OrderServiceImpl 코드나, rateDiscountPolicy와 fixDiscountPolicy 코드를 변경해줘야하는 방법이다.그렇다면 세 가지 방법 전부 처음에 배웠던 객체 지향 프로그래밍의 컴퓨터 부품을 갈아끼우듯이 구현체를 변경해주는게 아니지 않나? 객체 지향적으로 프로그래밍되었다면 구현체를 변경할 때 실제 자바 파일의 소스코드를 가서 수정해주지 않아도, 설정 파일이나 기타 등등 설정을 위한 객체(혹은 클래스, 혹은 뭐든… 아직 배우기 전이어서 뭐가 있는지 모르겠음) 내용만 변경해주어야 하는것이 아닌가???==================================== 글을 깔끔하게 정리하지 못한 점 죄송합니다... 시간에 쫓기고 있어서 강의를 빨리 들어야 해서요ㅠㅠㅠ 저의 질문은 밑줄친 부분입니다. 제가 생각한 것이 맞는건지, 틀린건지,,, 틀렸다면 어떤 부분을 잘못 생각한 것인지 궁금합니다. 감사합니다.
- 미해결스프링 핵심 원리 - 기본편
getBean() 관련 질문 - MemberServiceImpl
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]제가 제대로 잘 이해를 못하는 지 관련 질문을 못 찾겠습니다. ConfigurationSingletonTest 학습할 때 MeberServiceImpl과 OrderServiceImpl의 getMemberRepository 매써드를 사용하기 위해서 getBean의 타입을 다음과 같이 지정한다고 하였는데 @Beand을 통해 생성된 memberService 매써드가 MemberService 클래스를 반환하는 데 그게 아닌 구현한 MemberServiceImpl 클래스를 변환해서 가져오겠다는 건가요? 어떤 식으로 작동하게 되는 지 잘 모르겠습니다.
- 미해결스프링 핵심 원리 - 기본편
web 라이브러리 추가 시 CoreApplication 무한 로딩
안녕하세요. request 스코프 예제를 시작하려다가 web 라이브러리를 다음과 같이 추가하고,CoreApplication에서 main method를 실행하였는데요.무한 로딩 되는 현상이 발생합니다. 체크 표시가 뜨지 않고계속 이 상태에서 돌아가는데 왜이런지 알 수 있을까요..? 어떻게 해결하면 좋을까요ㅜㅠ
- 해결됨스프링 핵심 원리 - 기본편
섹션 6, 7 AutoAppConfig Spring Container에서 에러발생
섹션 6, 7 AutoAppConfig.class파일을 활용하여 AutoAppConfigTest.class에서 Spring Container에서 에러발생합니다.Spring Container에 Bean이 등록이 안되는것같은데, Component와 Autowired 설정은 제대로 한것같은데도 Bean으로 등록이 안되는것같습니다 . 제 core 코드를 압출하여 링크로 첨부합니다.https://we.tl/t-a2UUbo53a8 org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'orderServiceImpl' defined in file [Z:\ㄴㅇ\Study_Workdir\spring\1_spring_core_principle\core\core\out\production\classes\hello\core\order\OrderServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: No qualifying bean of type 'hello.core.member.MemberRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {} 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: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:960) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) at org.springframework.context.annotation.AnnotationConfigApplicationContext.<init>(AnnotationConfigApplicationContext.java:93) at hello.core.scan.filter.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.NoSuchBeanDefinitionException: No qualifying bean of type 'hello.core.member.MemberRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {} at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1880) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1406) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1353) at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:911) at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:789) ... 17 more
- 해결됨스프링 핵심 원리 - 기본편
의존성에 대해 궁금한것이있습니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의 보면 9분에 FixDiscountPolicy가 DIscountPolicy를 의존하고 있다고하는데 제가 알고있는 의존은 A클래스에서 B클래스를 new 로 생성하면 A가 B를 의존한다라고 알고있는데 인터페이스를 구현한 구현 객체도 의존한다고하니까 잘모르겠네요
- 해결됨스프링 핵심 원리 - 기본편
Interface를 구현한 객체가 2개라면 Dependency Injection은?
@Autowired public MemberServiceImpl(MemberRepository memberRepository) { this.memberRepository = memberRepository; } @Component public JDBCMemberRepository implements MemberRepository {...} @Component public MybatisMmeberRepository implements MemberRepository{...} <전제>ConfigurationFile에 @ComponentScan 을 적용한 상태고아래와 같은 상황이 있으며,dependency 관계가 위와 같다면 <상황>ApplicationContext에서 getBean()을 통해 객체를 사용하고자 할때 dependency injection을 한다면 <결과예상>어떤 객체가 injection되는건가요?JDBC MemberRepositoryMybatisMemberRepository <질문하는 이유>Spring Container에서는 Component로 등록한 Bean을 ComponentScan으로 자동으로 등록하며, ApplicationContext 객체를 만드는 시점에서 dependency를 추적하고 , getBeans로 객체를 만드는 시점(`new [xxx]`)에서 그에 따라 Runtime에 dependent한 객체를 주입한다고 알고 있습니다.그럼, <상황> 의 경우에는, 역할인 interface를 type으로 하여 생성자 주입을 받고있는데, Spring에서는 무엇을 선택하는지 모르겠고,근거는 무엇이고제가 영상에서 놓친 부분이 있다면, 그것이 어느 영상의 어느 부분까지인지는 몰라도어느 영상이나 어느 파트에서 알려주신건지라도 알려주세요. 제가 글로 적은 부분에서 오류가 있다면 같이 잡아주셨으면 합니다.
- 해결됨스프링 핵심 원리 - 기본편
@Configuration과 @ComponentScan 질문입니다
@Configuration이 설정 정보임을 알려주며 동시에 싱글톤을 보장할 수 있게 설정 파일 클래스에 사용하는 것은 이해했습니다. 마찬가지로 @ComponentScan 또한 @Component가 붙은 클래스들을 스캔하여 스프링 빈 자동 등록과 동시에 싱글톤 유지가 되도록 하는 것도 이해했습니다. 여기서 @ComponetScan(빈 자동 등록)을 사용할 때도 @Configuration 어노테이션도 사용이 필수인가요?@Component 사용 시에도 싱글톤을 유지하기 할 수 있다고 하셨는데, @ComponetScan위에 @Configuration 어노테이션을 사용하는 이유가 따로 있을까요?설정 파일 인식용인가요?아래와 같이 AutoAppConfig 파일 자체도 빈에 등록하기 위함인가요?@Configuration @ComponentScan( /* 탐색할 패키지의 시작 위치를 지정. 이 패키지 포함 하위 패키지 모두 탐색 두 개 이상일 때 → basePackages = {"hello.core", "hello.service"} */ basePackages = "hello.core", // 지정한 클래스의 패키지를 탐색 시작 위로 지정 basePackageClasses = AutoAppConfig.class ) public class AutoAppConfig { } 답변 부탁드립니다!감사합니다
- 미해결스프링 핵심 원리 - 기본편
빈 이름으로 조회 x
[질문 내용]여기에 질문 내용을 남겨주세요. @Test @DisplayName("빈 이름으로 조회X") void findBeanByName_X() { // MemberService memberService = ac.getBean("xxxxx", MemberService.class); assertThrows(NoSuchBeanDefinitionException.class, () -> ac.getBean("xxxxx", MemberService.class)); } }이 코드에서 주석을 제거하면 여전히 NoSuchBeanDefinitionException이 발생하는데 이는 주석 코드에서 오류가 생겨서 더이상 진행되지 않기때문에 assertThrows코드가 실행되지 않은것인가요?
- 미해결스프링 핵심 원리 - 기본편
인텔리제이 유로 무료
안녕하세요 자바로 졸작을 만들어보기 위해 공부중인 컴공 4학년 학생입니다.해당 강의를 들으면서 프로젝트도 만들어보고 싶은데 유로로 듣는게 나을까요??