30%
61,600원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링 핵심 원리 - 기본편
@Configuration을 통한 @Bean 등록 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.@Configuration을 통해 빈을 수동등록할 때 강의 예제에서는 AppConfig 클래스를 사용하였는데요AppConfig1, AppConfig2, AppConfig3이라는 클래스에 각각 @Configuration을 붙이고 AppConfig1에서는@Bean public MemberService memberService()를AppConfig2에서는 @Bean public OrderService orderService()를 등록하고 ApplicationContext ac1 = new AnnotationConfigApplicationContext(AppConfig1.class);ApplicationContext ac2 = new AnnotationConfigApplicationContext(AppConfig2.class);이렇게 해서 스프링 컨테이너를 두 개 만들 수 있을거 같습니다이렇게 했을때 단점과 장점이 있는지? 실제로 이렇게 컨테이너를 분할하는 경우가 있는지? 궁금합니다 추가적으로 각 AppConfig1, AppConfig2에서 동일한 객체를 스프링 빈으로 등록한다면 이때도 여전히 싱글톤인지 궁금합니다
- 미해결스프링 핵심 원리 - 기본편
상향식 개발방식
[질문 내용]지금 선생님이 가르쳐주시는 방식이 보통 실무에서 만드는 방식인가요? 컨트롤러 -> 서비스 -> 리포지토리 순서로 만드는것으로 알고있어서 궁금합니다
- 미해결스프링 핵심 원리 - 기본편
5. 싱글톤 컨테이너 - 싱글톤 패턴의 단점 부분 질문입니다.
안녕하세요,싱글톤 컨테이너 - 싱글톤 패턴의 단점 부분에서 질문이 있습니다. 스프링 컨테이너가 빈을 싱글톤으로 관리하는 부분에 대해 설명하시는 강의이므로 ["컨테이너에 의한 싱글톤"과 비교하여 "일반 싱글톤 패턴"이 갖는 단점]이라는 측면으로 이해하려 합니다.의존관계상 클라이언트가 구체 클래스에 의존한다 -> DIP를 위반한다. / 클라이언트가 구체 클래스에 의존해서 OCP 원칙을 위반할 가능성이 높다.다른 질문글들을 찾아보니 이 내용은 "컨테이너를 사용하지 않을 경우 싱글톤이 아닌 일반적인 구체 클래스를 클라이언트에서 직접 new 하듯이 클라이언트에서 구체적인 싱글톤 클래스의 getInstance를 호출해야한다"는 점에서 DIP를 위반한다는 내용으로 이해됩니다. 그러면 이 단점은 컨테이너를 사용하지 않을 경우 싱글톤 클래스나 싱글톤이 아닌 클래스나 마찬가지로 갖는 단점인데 싱글톤 패턴의 단점이라고 표현하신 점에서 제가 이해하지못한 차이가 있는지 궁금합니다.테스트하기 어렵다. / 내부 속성을 변경하거나 초기화 하기 어렵다.컨테이너를 사용하면 config에서 의존관계의 구체클래스만 변경하며 객체의 속성 변경이 용이하지만 직접 구현한 싱글톤 패턴은 이미 생성된 static 객체가 존재하므로 내부를 변경해야한다면 1) 싱글톤 클래스의 코드를 고치거나 2) 클라이언트 또는 테스트 코드에서 수정자 등을 이용해야하므로 내부 속성 변경이 번거롭고 따라서 여러 케이스로 테스트가 어렵다는 의미일까요?결론적으로 유연성이 떨어진다. ("DI가 어렵다, 구체 클래스의 getInstance를 다 해줘야 한다, ...")이 부분도 컨테이너가 없을 경우 일반 클래스, 싱글톤 클래스가 갖는 단점이라 생각되는데 싱글톤의 단점이라 표현하신 점에서 제가 이해하지 못한 부분이 있는지 궁금합니다. 감사합니다.
- 해결됨스프링 핵심 원리 - 기본편
[설정 정보 질문] Code: @Configuration proxyMethods usage warnings 기본값 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 아니요2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요?예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요. 섹션 6의 첫 번째 강의를 듣던 도중 쉬프트+쉬프트를 누르고 @configuration을 검색하다가 인터넷에 검색해봐도 모르겠는 설정을 건들여서 질문드리게 되었습니다.Code: @Configuration proxyMethods usage warnings 에서 기본값이 ON과 OFF 중 뭔지 알 수 있을까요?강의 내용과 상관 없는 질문 죄송합니다.
- 미해결스프링 핵심 원리 - 기본편
coreapplication 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 이렇게 에러가 뜨는데 어떻게 처리해야할까요?
- 미해결스프링 핵심 원리 - 기본편
UnsatisfiedDependencyException 질문입니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. AutoAppConfigTest를 실행하는데 계속 오류가 납니다. 강의를 보며 비교했을 때 다른 점은 찾지 못하였습니다.다음과 같은 오류가 발생합니다.21:57:37.602 [main] WARN org.springframework.context.annotation.AnnotationConfigApplicationContext -- Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'orderServiceImpl' defined in file [C:\Users\user\Desktop\core\out\production\classes\Hproject\core\order\OrderServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: No qualifying bean of type 'Hproject.core.member.MemberRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'orderServiceImpl' defined in file [C:\Users\user\Desktop\core\out\production\classes\Hproject\core\order\OrderServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: No qualifying bean of type 'Hproject.core.member.MemberRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
- 미해결스프링 핵심 원리 - 기본편
AppConfig에서 직접 빈 등록하는 이유
AppConfig 파일을 만들고 @Configuration 을 붙여서 @Bean을 직접 등록하는 경우는 어떤 경우인지 궁금합니다. 이전 강의에서 @Service, @Repository, @Component를 붙여도 스프링에서 빈으로 자동등록이 된다 들었는데, 이미 위에 나열된 어노테이션을 붙였음에도AppConfig에서 @Configuration을 붙이고 @Bean으로 직접 등록하는 경우는 뭘까요..? 자동등록된다고 공부했는데, 또 이렇게 직접 수동등록해주니까 개념이 헷갈려요.이미 자동등록 된 애들을 왜 다시 직접 등록할까요??@Configuration public class AppConfig { @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public MemberRepository memberRepository() { return new MemoryMemberRepository(); } @Bean public OrderService orderService() { return new OrderServiceImpl(memberRepository(), discountPolicy()); } @Bean public DiscountPolicy discountPolicy() { return new RateDiscountPolicy(); } }
- 미해결스프링 핵심 원리 - 기본편
스프링 완전정복 로드맵에 따라 강의중인데 질문있습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]저 로드맵 따라서 하는게 맞을까요? 1. 뭔가 오히려 MVC 1,2편이 서블릿부터 다루고 있는것 같아서 궁금합니다.2. HTTP 웹 기본 지식이 첫번째에 들어가야 하는게 아닐까요?
- 미해결스프링 핵심 원리 - 기본편
@Configuration 질문드립니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 네3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 네[질문 내용]여기에 질문 내용을 남겨주세요. @Configuration은 어떨때 쓰이나요?Appconfig가 있는 어플도 있고 없는 어플도 있는데 차이를 모르겠습니다.자세히 설명주시면 감사하겠습니다.
- 미해결스프링 핵심 원리 - 기본편
OrderApp 빌드 오류
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]CoreApplication이나 MemberApp은 잘 되는데 OrderApp을 실행하면 다음과 같은 오류가 뜹니다.. 코드 문제인가 싶어 복붙도 해서 실행해봤는데 똑같은 결과가 나옵니다. 구글에 검색해보니 같은 포트를 써서 그렇다는 이야기를 봐서 8080 포트가 켜져있는지 보았는데 없었습니다.도저히 모르겠어서 질문드립니다 ..ㅠㅠ
- 미해결스프링 핵심 원리 - 기본편
핵심원리 기본편 외 추천 해주세요
김영한님스프링 핵심원리 기본편 수강신청 했습니다영한님 강좌를 모두 수강 신청할순 없으니기본편외에도. 꼭 알면좋겠다는 강의 2편정도만 더 추천해주세요 백앤드 개발자. 초급과중급사이 쯔음에. 있는사람으로. 추천해주세요
- 해결됨스프링 핵심 원리 - 기본편
@Autowired를 쓴 이유
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용] @Autowired private ObjectProvider<PrototypeBean> provider;에서 @Autowired는 PrototypeBean을 주입하기 위해 필요한 것인가요?
- 해결됨스프링 핵심 원리 - 기본편
Map<String, DiscountPolicy>에서 수동 등록
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]@Configurationpublic class DiscountPolicyConfig { @Bean public DiscountPolicy rateDiscountPolicy() { return new RateDiscountPolicy(); } @Bean public DiscountPolicy fixDiscountPolicy() { return new FixDiscountPolicy(); }}와 같이 수동으로 등록하고Map<String, DiscountPolicy> policyMap의 DiscountPolicy에 fixDiscountPolicy, rateDiscountPolicy가 모두 잡히게 하려면 DiscountService에서 new AnnotationConfig...(DiscountPolicyConfig.class);를 사용해야하나요? 그러면 AutoAppConfig.class와 @Configuration이 충돌하는데, 어떻게 해야되나요? 할인 정책 설정 정보를 수동으로 등록하려면 코드를 어떻게 작성해야할 지 모르겠어서 질문드립니다.
- 미해결스프링 핵심 원리 - 기본편
AnnotationConfigApplicationContext 다형성
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]강의 내용에서 MemberApp과 OrderApp에는 다음과 같이 // MemberApp.javapackage hello.core; import hello.core.member.Grade; import hello.core.member.Member; import hello.core.member.MemberService; import hello.core.member.MemberServiceImpl; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class MemberApp { public static void main(String[] args) { // AppConfig appConfig = new AppConfig(); // MemberService memberService = appConfig.memberService(); ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); MemberService memberService = applicationContext.getBean("memberService", MemberService.class); Member member = new Member(1L, "memberA", Grade.VIP); memberService.join(member); Member findMember = memberService.findMember(1L); System.out.println("new member = " + member.getName()); System.out.println("find Member = " + findMember.getName()); } } // OrderApp.javapackage hello.core; import hello.core.member.Grade; import hello.core.member.Member; import hello.core.member.MemberService; import hello.core.member.MemberServiceImpl; import hello.core.order.Order; import hello.core.order.OrderService; import hello.core.order.OrderServiceImpl; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class OrderApp { public static void main(String[] args) { // AppConfig appConfig = new AppConfig(); // MemberService memberService = appConfig.memberService(); // OrderService orderService = appConfig.orderService(); ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); MemberService memberService = applicationContext.getBean("memberService", MemberService.class); OrderService orderService = applicationContext.getBean("orderService", OrderService.class); Long memberId = 1L; Member member = new Member(memberId, "memberA", Grade.VIP); memberService.join(member); Order order = orderService.createOrder(memberId, "itemA", 20000); System.out.println("order = " + order); System.out.println("order.calculatePrice() = " + order.calculatePrice()); } } applicationContext를 생성할 때 그 자료형을 ApplicationContext란 Interface로 선언했는데 왜 ApplicationContextInfoTest에서는 ac의 자료형을 AnnotationConfigApplicationContext으로 하신거죠? // ApplicationContextInfoTest.javapackage hello.core.beanfind; import hello.core.AppConfig; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class ApplicationContextInfoTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); @Test @DisplayName("모든 빈 출력하기") void findAllBean() { String[] beanDefinitionNames = ac.getBeanDefinitionNames(); for (String beanDefinitionName : beanDefinitionNames) { Object bean = ac.getBean(beanDefinitionName); System.out.println("name = " + beanDefinitionName + " object = " + bean); } } @Test @DisplayName("애플리케이션 빈 출력하기") void findApplicationBean() { String[] beanDefinitionNames = ac.getBeanDefinitionNames(); for (String beanDefinitionName : beanDefinitionNames) { BeanDefinition beanDefinition = ac.getBeanDefinition(beanDefinitionName); } } } 그리고 ac의 자료형을 ApplicationContext 로 했을 때는 findApplicationBean 메서드의 ac.getBeanDefinition이 사용할 수 없다고 나오는데 AnnotationConfigApplicationContext으로 선언했을 때는 사용할 수 있는데 그 이유가 뭔지 궁금합니다.
- 해결됨스프링 핵심 원리 - 기본편
store에 static을 사용하는 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]OrderServiceTest에서 NullPointerException 오류가 나서 찾아보니 MemoryMeberRepository의 store에 static이 빠져서 오류가 났었더라고요.store에 static을 붙이는 이유와 붙이지 않으면 NullPointerException이 발생하는 이유가 궁금합니다.
- 미해결스프링 핵심 원리 - 기본편
인텔리제이 코드창 및 core패키지 초기화 오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]첫 번째 사진의 화면에서 강의에 나와있는대로 CoreApplication 클래스의 코드를 실행 할 겨우 밑에 있는 사진 처럼 콘솔창은 정상적으로 작동하는거 같지만 코드 창이 초기화면 으로 돌아가는 오류가 발생합니다. 또한 command+tab을 하여 다른 창을 보고 다시 인텔리제이로 돌아 올 경우 밑에 사진처럼 core 패키지가 사라졌다 조금 기다려야 다시 나옵니다.인텔리제이를 삭제 후 재설치 해보기도 하였고 인텔리제이 파일 창에서 캐시삭제와 설정 초기화도 해보았지만 해결되지가 않습니다 ㅠㅠ 제발 해결방법 좀 알려주시면 감사하겠습니다.추가로 그냥 코드창을 띄어놓고 알트탭하여 인터넷창을 보고 돌아와도 코드창이 위 화면처럼 사라지며 core패키지가 사라졌다 다시 생깁니다. 참고로 스프링은 Gradle-groovy 프로젝트spring boot : 3.2.3 버전packaging : jarjava : 21로 ppt 와 강의 내용 그대로 설정하였습니다.제발 부탁드리겠습니다.
- 해결됨스프링 핵심 원리 - 기본편
예제의 라이프사이클 질문있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]LifeCycleTest에서 networkClient가 빈으로 등록되는 순서가1. new NetworkClient()로 NetworkClient 인스턴스 생성 (ulr=null)2. setUrl을 통해 1에서 생성된 인스턴스의 url 설정3. 스프링 컨테이너에 빈 등록이 순서로 이해했습니다. 스프링 빈의 라이프사이클이스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸전 콜백 이 순서인데 이 강의의 예제에서 의존관계 주입은 없으니까 바로 초기화 콜백인 init()이 실행되고, 사용 또한 하지 않으니 바로 소멸전 콜백인 close()가 실행 되는 것으로 이해하면 될까요? 정리하면 networkClient 빈 생성 -> x -> init() -> x -> close()이 순서가 맞는지 확인 부탁드립니다!
- 해결됨스프링 핵심 원리 - 기본편
@Configuration 질문 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]이전 싱글톤 방식의 주의점 강의 질문 답변 중에TestConfig에서 @Configuration이 빠져도 싱글톤으로 관리되는 이유가 AnnotationConfigApplicationContext(TestConfig.class)로 스프링 컨테이너에 빈을 직접 등록해서라고 하셨는데 이번 강의에서도 AnnotationConfigApplicationContext(AppConfig.class)로 직점 등록하는데 AppConfig에서 @Configuration을 빼고 테스트 코드를 돌리면 memberRepository가 세 번 호출되는 이유가 궁금합니다.
- 미해결스프링 핵심 원리 - 기본편
오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요.출력은 나오는 것 같은데 다음과 같은 오류가 발생합니다.policyMap = {fixDiscountPolicy=hello.core.discount.FixDiscountPolicy@6995bf68, rateDiscountPolicy=hello.core.discount.RateDiscountPolicy@5143c662}policies = [hello.core.discount.FixDiscountPolicy@6995bf68, hello.core.discount.RateDiscountPolicy@5143c662]20:43:46.722 [main] WARN org.springframework.context.annotation.AnnotationConfigApplicationContext -- Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'orderServiceImpl' defined in file [C:\spring project\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,rateDiscountPolicyorg.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'orderServiceImpl' defined in file [C:\spring project\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,rateDiscountPolicyat 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:1355)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1192)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:562)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522)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.Autowired.allbean.AllBeanTest.findAllBean(AllBeanTest.java:17)at java.base/java.lang.reflect.Method.invoke(Method.java:578)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,rateDiscountPolicyat 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)
- 해결됨스프링 핵심 원리 - 기본편
gradle dependencies library 오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]build.gradel에 web 라이브러리 추가하고 External Libraries에도 web관련 라이브러리들이 잘 추가가 되었는데 오른쪽 Gradle에 dependencies library에 빨간줄은 왜 생기는 걸까요??