묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 기본편
ApplicationContext에 대하여
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]2:30 부분부터 ApplicationContext에 대한 설명이 나오고 이게 스프링 컨테이너라고 하시는데 무료 입문 강의인 '스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술'에선 스프링을 실행했을 때도 ApplicationContext라는 걸 입력한 기억이 없는데요 ApplicationContext를 직접 쓰는 거랑 안 쓰는 거랑 어떤 차이가 있는 건가요?
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
챕터 7에 패키지 부분에서
랜덤 실수 부분 설명하실 때 random.nextDouble()에는 범위 지정이 안된다고 하셨는데 제가 괄호 안에 10.0을 넣어서 해보니 오류 없이 잘 실행이 되는데 왜 그럴까요??그리고 로또 번호 하실 때 random.nextInt(45) + 1 이라고 하시고 괄호로 감싸셨는데 괄호를 안쓰면 341 같은 백의 자리 숫자가 나오더라고요 왜 그런건가요?
-
미해결스프링 핵심 원리 - 기본편
AppConfig를 beforeEach() 내부에서 선언하는 것과 외부에서 선언하는 것의 차이
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강의에선 아래 코드처럼 beforeEach() 내부에 AppConfig가 선언되어 있는데요.public class OrderServiceTest { MemberService memberService; OrderService orderService; @BeforeEach public void beforeEach() { AppConfig appConfig = new AppConfig(); memberService = appConfig.memberService(); orderService = appConfig.orderService(); } 아래 코드처럼 AppConfig는 beforeEach() 밖에서 미리 선언해 두면 안 되나요? 테스트 실행해 봤을 땐 오류는 없는데, 실무에선 안 좋은 코드인가요? 그렇다면 이유가 궁금합니다. MemberService memberService; OrderService orderService; AppConfig appConfig = new AppConfig(); @BeforeEach public void beforeEach() { memberService = appConfig.memberService(); orderService = appConfig.orderService(); }
-
미해결스프링 핵심 원리 - 기본편
컴포넌트 스캔 관련 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요. package hello.core; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.FilterType; @Configuration @ComponentScan( basePackages = "hello.core", excludeFilters = @ ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class)) public class AutoAppConfig { }package hello.core; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class CoreApplication { public static void main(String[] args) { SpringApplication.run(CoreApplication.class, args); } }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 //MemoryMemberRespository 객체로 초기화된 MemberServiceImpl 객체 반환 public MemberService memberService() { System.out.println("call AppConfig.memberService"); return new MemberServiceImpl(memberRepository()); } @Bean public OrderService orderService() { System.out.println("call AppConfig.orderService"); return new OrderServiceImpl ( memberRepository(), discountPolicy() ); } @Bean public MemberRepository memberRepository() { System.out.println("call AppConfig.memberRepository"); return new MemoryMemberRepository(); } @Bean public DiscountPolicy discountPolicy() { return new RateDiscountPolicy(); } } ㅇCoreApplicaton 클래스(@SpringBootApplicaton)을 실행하면, @SpringBootApplicaton 에 @ComponentScan이포함되어 있기 때문에 CoreApplication 의 패키지 하위를전부 scan 합니다.그 과정에서 AppConfig 와 AutoAppConfig 를 만날텐데@ ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class)) AutoAppConfig에 @Configuration 은 스캔하지 말라고 되어있습니다. Q1. 그러면 AppConfig 는 스캔 되지 않고 빈으로 생성되지 않는 건가요?Q2. AutoAppConfig도 @Configuration이 등록되어있는데그렇다면 AutoAppConfig도 빈으로 생성되지 않는건가요?Q3. @Configuration public class AppConfig { @Bean //MemoryMemberRespository 객체로 초기화된 MemberServiceImpl 객체 반환 public MemberService memberService() { System.out.println("call AppConfig.memberService"); return new MemberServiceImpl(memberRepository()); } @Bean public OrderService orderService() { System.out.println("call AppConfig.orderService"); return new OrderServiceImpl ( memberRepository(), discountPolicy() ); } @Bean public MemberRepository memberRepository() { System.out.println("call AppConfig.memberRepository"); return new MemoryMemberRepository(); } @Bean public DiscountPolicy discountPolicy() { return new RateDiscountPolicy(); } }AppConfig 를 컴포넌트 스캔 대상에서 제외해버리면 AppConfig의 수동 빈 등록 내용도 전부 무시되어 얘네들이빈으로 생성되지 않는건가요? Q4.CoreApplicaotn 에도 @Configuration 이,AutoAppConfig에도 @Configuration이 설정되어있는데이 경우 충돌이 일어나지는 않나요? Q5.만약 Q4에서 충돌이 일어나지 않는다면, 두개의 Configuraiton 내용이 둘다 프로젝트에 적용되는 건가요?
-
미해결스프링 핵심 원리 - 기본편
DiscountPolicy를 호출할 때 왜 인터페이스를 호출하나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] RateDIscountPolicy로만 불러오는게 아니라 왜private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); 처럼 인터페이스로부터 불러 오나요?인터페이스는 구현체를 만들때에만 쓰이는게 아닌가요?
-
해결됨자바 기초부터 마스터하기 with 은종쌤 (Do it 자바 프로그래밍 입문) - Part 1(기초편)
singleton pattern
싱글톤 패턴으로 클래스 작성시 private static Company company = new Company();라고 작성을 하였는데 프로그램 실행 부터 메모리에 올라가는 static 필드가 바로 인스턴스를 생성하는건가요? static 필드와 인스턴스의 생성 시점이 충돌하지는 않나요?클래스 로딩과 static 필드 중 어떤게 먼저 메모리에 잡히는지 궁금합니다.
-
미해결Java/Spring 주니어 개발자를 위한 오답노트
@Entity != RDB Table에 대한 질문입니다.
예전에 조영호님의 '오브젝트' 서적을 읽고 "어떻게 비즈니스 모델을 더 변경에 부드럽게 설계할 수 있을까?"에 고민을 했습니다. 그때의 기억으로는 "역할은 책임을 위한 최소한의 정보만 가지고 있자"라고 제가 이해를 했고 @Entity가 달린 class를 "역할"로 보고 코드 작성을 하니 1개의 RDB Table이 2개 이상의 Entity Class로 매핑이 되었습니다.평소에 1개 Entity Class가 1개 Table와 매핑하는 것과 달라 괴리감이 들었습니다. 핵사고날 아키텍쳐를 적용하면 비즈니스 모델과 JPA의 Entity를 분리할 수 있지만 팀원들과의 합의도 필요해서 적용할 수 없었고 주니어라 해당 기술 도입으로 생산성이 올라갈 것이라고 장담할 수도 없었습니다. 두서가 없이 말이 많았는데 궁금한 점은!"RDB의 1개 Table을 2개 이상의 Entity로 매핑해서 운영을 하는게 보편적인 방식인가요?" 입니다. ++ 개인적인 질문입니다만 객체의 협력 관계를 먼저 설계하는 것과 DB 설계하는 것 어떤 것이 우선인가요?
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
메소드 리턴 질문이요!
번호와 주소는 String 으로 입력하고 그걸 출력하셨고액티비티는 매소드를 바로 출력에 입력해서 사용하셨는데요 액티비티처럼 다 할 수 있는데 왜 굳이 String 으로 한번 거쳐서 변수 이름을 바꾸고 출력하는가요??? 그래야하는 이유가 있을까요?
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
Quiz에서 정답이 달라도 괜찮은가요???
Quiz 6을 풀고 답을 봤는데 결과는 같지만 과정이 조금 달라서 왜 그런지 찾아보는데 아무리 봐도 이해가 잘 안가네요 ㅠㅠString[] size0 = new String[10]; for (int i = 0; i < size0.length; i++) { int shoeSize = 250 + (5 * i); System.out.println("사이즈 " + shoeSize + " (재고 있음)"); } int[] sizeArray = new int[10]; for (int i = 0; i < sizeArray.length; i++) { sizeArray[i] = 250 + (5 * i); } for (int size : sizeArray) { System.out.println("사이즈 " + size + " (재고 있음)"); }위에것이 제가 한거고 아래가 선생님인데요둘다 결과는 같게 출력이 됩니다. 아래의 sizeArray[i] 를 하는 이유랑 아래 for문 하나 더 해서 for(int size : sizeArray) 를 쓰는 이유가 이해가 잘 안가서용.. PS. Quiz를 푸는데 머리에서 바로바로 응용할 수가 없어서 앞에서 배운 부분들을 다시 돌려보고 찾아보면서 quiz 를 입력하는데 괜찮은건가요?? (마치 오픈북처럼...)물론 안보고하면 최고긴 할텐데 그렇게 하려면 완전 달달 외우고있어야 하는것 같아서요
-
해결됨스프링 핵심 원리 - 기본편
안녕하세요 제가 프로토타입 스코프를 싱글톤 빈과 사용시 발생하는 문제점을 정리했는데 맞게 정리를 한건지 궁금해서 질문을 합니다.
[질문 내용]프로토타입 빈은 스프링 컨테이너에 요청시 새로 생성하고 반환한다. 이때 싱글톤 빈과 함께 사용이 되면 싱글톤 빈은 한번만 생성이 되므로 싱글톤 빈이 자동으로 의존관계 주입을 하게 되면 싱글톤 빈이 프로토타입 빈 한개를 계속 사용하게 된다 왜냐면 싱글톤 빈에서 의존관계 주입은 한번만 발생하기 때문이다. 따라서 싱글톤빈이 매번 새로운 프로토타입 빈을 사용하는게 아니라 의존관계를 주입할때 가져온 프로토타입 빈을 싱글톤 빈의 생명주기에 맞춰서 사용하게 된다.다만 clientA, clientB 여러 싱글톤 빈들이 프로토타입 빈을 주입 받을때는 주입 받는 시점에 각각 새로운 프로토타입 빈이 생성되서 주입을 받으므로 각 싱글톤 빈들이 가지는 프로토타입 빈은 다르다. 하지만 결국에는 각각의 싱글톤 빈들이 위와 같은 문제를 가지게 된다.감사합니다.
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
private 과 getter, setter
클래스에서 private를 접근 지정자로 설정했는데, getter와 setter 없이 main 클래스의 scanner 를 이용해 접근 할 수도 있는지 궁금합니다.
-
미해결자바 기초부터 마스터하기 with 은종쌤 (Do it 자바 프로그래밍 입문) - Part 1(기초편)
return 사용되는 위치가 궁금합니다
return은 어느 위치에서나 다 사용이 가능하나요?
-
미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
Enum Class와 Sealed Class에 대한 질문입니다.
안녕하세요.JAVA만 꽤 오래 사용하다가, 이번에 이직하면서 코틀린을 하게 되어 강사님 강의를 들으며 공부하고 있습니다.많이 부족하지만 너무 자세히 설명해주시고 친절하게 설명해주셔서 덕분에 잘 따라가고 있습니다. 궁금한 내용은 아래와 같습니다.Enum과 static (Companion) 의 차이가 무엇일까, 언제 다르게 사용할까 라는 궁금증이 생겼습니다. 자바를 사용하다가 코틀린 강의를들으면서 가장 인상깊었던 부분인 when 부분입니다. enum과 sealed를 어떻게 실무에서 dto와 사용하는지 예시를 알고 싶습니다.Sealed를 어떤 경우에 사용해야할지 감이 안잡히네요. 혹시 조금 만 더 자세하게 설명을 해주실 수 있을까요? 바쁘실텐데 감사합니다. ps. 강사님 발음에 매번 취하고 있습니다.. :)
-
해결됨스프링 핵심 원리 - 기본편
ObjectProvider와 new 객체 생성의 차이
해당 강의에서 ObjectProvider를 사용하여 DL 방식으로 컨테이너에서 PrototypeBean 객체를 찾고 PrototypeBean은 prototype 스코프이므로 새로운 객체를 생성하고 반환해준다고 이해했습니다.새로운 객체를 생성하여 반환하는 것이라면 굳이 ObjectProvider를 사용하지 않고 new 객체를 생성하여 사용해도 되지 않을까요? 이 부분이 궁금해서 질문드립니다.제 생각에는 ObjectProvider를 사용하면 만약 prototype 스코프의 객체가 다른 객체를 자동으로 주입받아야 할 때 new 객체는 사용자가 의존관계를 주입해주어야 하므로 문제가 생깁니다. 따라서 스프링의 DI 기능을 사용하기 위해 사용하는 것 같다고 생각됩니다.<ObjectProvider 사용> @Scope("singleton") static class ClientBean { @Autowired private ObjectProvider<PrototypeBean> prototypeBeanProvider; public int logic() { PrototypeBean prototypeBean = prototypeBeanProvider.getObject(); prototypeBean.addCount(); return prototypeBean.getCount(); } }<new 객체 사용> @Scope("singleton") static class ClientBean { public int logic() { PrototypeBean prototypeBean = new PrototypeBean(); prototypeBean.addCount(); return prototypeBean.getCount(); } }
-
미해결스프링 핵심 원리 - 기본편
@PostConstruct 호출시점 질문드립니다 :)
[질문 내용]request 객체는 스프링 컨테이너에 요청하는 시점에 생성되므로, 클라이언트가 브라우저에 url을 입력하고 전송하는 시점을 의미하는 것으로 이해하고 있습니다. 예제의 실행 결과를 보면 @PostConstruct가 호출된 결과보다 컨트롤러 메서드의 myLogger.getClass()를 호출한 결과가 먼저 출력되는 것을 확인할 수 있습니다. 컨트롤러 메서드가 실행되자마자 request객체가 생성되기 때문에 즉시 @PostConstruct가 호출되고 나머지 컨트롤러의 문장들이 실행되어야 할 것 같은데 실제로는 그런 결과가 나오지 않아서 이유가 궁금해 질문 남깁니다.
-
해결됨스프링 핵심 원리 - 기본편
안녕하세요 지금까지 배웠던 내용을 정리하고 있는데 맞게 정리를 한건지 궁금해서 질문을 합니다.
[질문 내용]스프링 컨테이너에 스프링 빈을 등록 할때 등록이 되는 빈들은 스프링 컨테이너가 관리해줬으면 하는 객체들을 저장하는 거다. 그리고 스프링 컨테이너에 스프링 빈을 등록하는 가장 큰 이유는 의존관계 주입을 스프링 컨테이너에 맡겨서 좋은 객체지향 약속들을(OCP, DIP) 지키기 위해서다.스프링 빈이 등록 될때 키 : 값 => 빈 이름 : 빈 객체로 저장이 된다. 스프링 빈에 등록을 할때는 @Configuration과 @Bean을 이용해서 수동으로 등록을 할 수 있고 @ComponetScan을 사용해서 @Componet, @Service, @Controller, @Repository가 붙은 클래스들을 자동으로 등록을 할 수가 있다.수동으로 등록을 할때에는 빈 이름은 메소드 이름이 빈 객체는 해당 메소드가 반환하는 객체가 자동으로 등록을 할때에는 빈 이름은 클래스 이름이(클래스 이름 맨 앞에는 소문자) 빈 객체는 해당 클래스의 객체가 저장이 된다.수동으로 등록 할때 주의 할 점은 @Bean만 쓰면 스프링 빈으로 등록이 되지만 싱글톤으로 관리 되지는 않는다 싱글톤으로 관리 되기 위해서는 @Configuration과 @Bean을 같이 써야 한다.감사합니다.
-
미해결스프링 핵심 원리 - 기본편
주문과 할인 도메인 실행과 테스트 강의에서 OrderServiceImpl.java
package hello.core.order; import hello.core.discount.DiscountPolicy; import hello.core.discount.FixDiscountPolicy; import hello.core.member.Member; import hello.core.member.MemberRepository; import hello.core.member.MemoryMemberRepository; import org.springframework.core.annotation.Order; public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository = new MemoryMemberRepository(); private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); @Override public Order createOrder(Long memberId, String itemName, int itemPrice) { Member member = memberRepository.findById(memberId); int discountPrice = discountPolicy.discount(member, itemPrice); return new Order(memberId, itemName, itemPrice, discountPrice); } }주문과 할인 도메인 실행과 테스트 강의에서 OrderServiceImpl.java 입니다java: org.springframework.core.annotation.Order is abstract; cannot be instantiated이런 오류가 뜨는데 어떻게해야할까요?
-
미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
안녕하세요 강사님 질문이 있습니다,.
1강에서 객체 인스턴스화하여 사용할 때 가변변수로 선언을 하셨는데 불변변수로 사용안하신 이유가 따로 있을까요!?
-
미해결스프링 핵심 원리 - 기본편
AutoAppConfig 실행오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]AutoAppConfig의 basicScan 테스트 코드를 실행했더니 다음 오류가 뜹니다.구글링해도 딱히 제 상황과 맞는 답을 찾을 수가 없어 질문합니다. 다음은 로그를 복사붙여넣기 했습니다./Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home/bin/java -ea -Didea.test.cyclic.buffer.size=1048576 -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=56873:/Applications/IntelliJ IDEA.app/Contents/bin -Dfile.encoding=UTF-8 -classpath /Users/kdj/.m2/repository/org/junit/platform/junit-platform-launcher/1.8.2/junit-platform-launcher-1.8.2.jar:/Users/kdj/.m2/repository/org/junit/platform/junit-platform-engine/1.8.2/junit-platform-engine-1.8.2.jar:/Users/kdj/.m2/repository/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar:/Users/kdj/.m2/repository/org/junit/platform/junit-platform-commons/1.8.2/junit-platform-commons-1.8.2.jar:/Users/kdj/.m2/repository/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar:/Applications/IntelliJ IDEA.app/Contents/plugins/junit/lib/junit5-rt.jar:/Applications/IntelliJ IDEA.app/Contents/plugins/junit/lib/junit-rt.jar:/Volumes/T7 Shield/P/core/out/test/classes:/Volumes/T7 Shield/P/core/out/production/classes:/Volumes/T7 Shield/P/core/out/production/resources:/Users/kdj/.gradle/caches/modules-2/files-2.1/org.springframework.boot/spring-boot-starter-test/2.7.15/b9bf93cbd1c5d5d09dd798fca143e55cb0662777/spring-boot-starter-test-2.7.15.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/org.springframework.boot/spring-boot-starter/2.7.15/6ea75176edb5ba47addd6143b3e0fec25811be1d/spring-boot-starter-2.7.15.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/org.springframework.boot/spring-boot-test-autoconfigure/2.7.15/f59ccd8f7db4c88bee112e59875a40767456664e/spring-boot-test-autoconfigure-2.7.15.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/org.springframework.boot/spring-boot-test/2.7.15/5a8442fcfc1750958460c55b255223434600aaf6/spring-boot-test-2.7.15.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/org.springframework/spring-test/5.3.29/dc55cc20f39ba89b46d59aa948c818c642da1848/spring-test-5.3.29.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/org.springframework/spring-core/5.3.29/528eafe4cef7bccf3df290dd99ac5833a9756183/spring-core-5.3.29.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/com.jayway.jsonpath/json-path/2.7.0/f9d7d9659f2694e61142046ff8a216c047f263e8/json-path-2.7.0.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/jakarta.xml.bind/jakarta.xml.bind-api/2.3.3/48e3b9cfc10752fba3521d6511f4165bea951801/jakarta.xml.bind-api-2.3.3.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/org.assertj/assertj-core/3.22.0/c300c0c6a24559f35fa0bd3a5472dc1edcd0111e/assertj-core-3.22.0.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest/2.2/1820c0968dba3a11a1b30669bb1f01978a91dedc/hamcrest-2.2.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/org.junit.jupiter/junit-jupiter/5.8.2/5a817b1e63f1217e5c586090c45e681281f097ad/junit-jupiter-5.8.2.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/org.mockito/mockito-junit-jupiter/4.5.1/f81fb60bd69b3a6e5537ae23b883326f01632a61/mockito-junit-jupiter-4.5.1.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/org.mockito/mockito-core/4.5.1/ed456e623e5afc6f4cee3ae58144e5c45f3b3bf/mockito-core-4.5.1.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/org.skyscreamer/jsonassert/1.5.1/6d842d0faf4cf6725c509a5e5347d319ee0431c3/jsonassert-1.5.1.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/org.xmlunit/xmlunit-core/2.9.1/e5833662d9a1279a37da3ef6f62a1da29fcd68c4/xmlunit-core-2.9.1.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/org.springframework.boot/spring-boot-autoconfigure/2.7.15/ca07c5ec0347342e207de3d26c0b686d43be60d5/spring-boot-autoconfigure-2.7.15.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/org.springframework.boot/spring-boot/2.7.15/4e09424cc410ca255bbea2657a8da0b54b381b2a/spring-boot-2.7.15.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/org.springframework.boot/spring-boot-starter-logging/2.7.15/1f4bece73c6e002fd0c113de552a746ab603b9be/spring-boot-starter-logging-2.7.15.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/jakarta.annotation/jakarta.annotation-api/1.3.5/59eb84ee0d616332ff44aba065f3888cf002cd2d/jakarta.annotation-api-1.3.5.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/org.yaml/snakeyaml/1.30/8fde7fe2586328ac3c68db92045e1c8759125000/snakeyaml-1.30.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/org.springframework/spring-jcl/5.3.29/4f84fbeec60adb1a50734b6077836e53844f0134/spring-jcl-5.3.29.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/net.minidev/json-smart/2.4.11/cc5888f14a5768f254b97bafe8b9fd29b31e872e/json-smart-2.4.11.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-api/1.7.36/6c62681a2f655b49963a5983b8b0950a6120ae14/slf4j-api-1.7.36.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/jakarta.activation/jakarta.activation-api/1.2.2/99f53adba383cb1bf7c3862844488574b559621f/jakarta.activation-api-1.2.2.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/org.junit.jupiter/junit-jupiter-params/5.8.2/ddeafe92fc263f895bfb73ffeca7fd56e23c2cce/junit-jupiter-params-5.8.2.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/org.junit.jupiter/junit-jupiter-api/5.8.2/4c21029217adf07e4c0d0c5e192b6bf610c94bdc/junit-jupiter-api-5.8.2.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/net.bytebuddy/byte-buddy/1.12.23/d470526e8c4566c04e9ae5d3ccb62d1a7aa58986/byte-buddy-1.12.23.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/net.bytebuddy/byte-buddy-agent/1.12.23/1cba11fdb72c383edacb909f79ae6870efd275e4/byte-buddy-agent-1.12.23.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/com.vaadin.external.google/android-json/0.0.20131108.vaadin1/fa26d351fe62a6a17f5cda1287c1c6110dec413f/android-json-0.0.20131108.vaadin1.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/org.springframework/spring-context/5.3.29/c374a72716d19220ca142efaab910adf5717c5d0/spring-context-5.3.29.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/ch.qos.logback/logback-classic/1.2.12/d4dee19148dccb177a0736eb2027bd195341da78/logback-classic-1.2.12.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-to-slf4j/2.17.2/17dd0fae2747d9a28c67bc9534108823d2376b46/log4j-to-slf4j-2.17.2.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/org.slf4j/jul-to-slf4j/1.7.36/ed46d81cef9c412a88caef405b58f93a678ff2ca/jul-to-slf4j-1.7.36.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/net.minidev/accessors-smart/2.4.11/245ceca7bdf3190fbb977045c852d5f3c8efece1/accessors-smart-2.4.11.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/org.apiguardian/apiguardian-api/1.1.2/a231e0d844d2721b0fa1b238006d15c6ded6842a/apiguardian-api-1.1.2.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/org.junit.platform/junit-platform-commons/1.8.2/32c8b8617c1342376fd5af2053da6410d8866861/junit-platform-commons-1.8.2.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/org.opentest4j/opentest4j/1.2.0/28c11eb91f9b6d8e200631d46e20a7f407f2a046/opentest4j-1.2.0.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/org.springframework/spring-aop/5.3.29/397c588ce63ba4c185a8c1bd2f1e9139075b3bf1/spring-aop-5.3.29.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/org.springframework/spring-beans/5.3.29/be40f557f3fa52c703f00e127ff639f8cf499617/spring-beans-5.3.29.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/org.springframework/spring-expression/5.3.29/44ac795a057c4a6360063801c54a2d148e5a2808/spring-expression-5.3.29.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/ch.qos.logback/logback-core/1.2.12/1d8e51a698b138065d73baefb4f94531faa323cb/logback-core-1.2.12.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-api/2.17.2/f42d6afa111b4dec5d2aea0fe2197240749a4ea6/log4j-api-2.17.2.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/org.ow2.asm/asm/9.3/8e6300ef51c1d801a7ed62d07cd221aca3a90640/asm-9.3.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/org.junit.jupiter/junit-jupiter-engine/5.8.2/c598b4328d2f397194d11df3b1648d68d7d990e3/junit-jupiter-engine-5.8.2.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/org.objenesis/objenesis/3.2/7fadf57620c8b8abdf7519533e5527367cb51f09/objenesis-3.2.jar:/Users/kdj/.gradle/caches/modules-2/files-2.1/org.junit.platform/junit-platform-engine/1.8.2/b737de09f19864bd136805c84df7999a142fec29/junit-platform-engine-1.8.2.jar com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit5 hello.core.scan.AutoAppConfigTest,basicScan06:23:36.656 [main] DEBUG org.springframework.context.annotation.AnnotationConfigApplicationContext - Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@618425b506:23:36.669 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalConfigurationAnnotationProcessor'06:23:36.736 [main] WARN org.springframework.context.annotation.AnnotationConfigApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [/Volumes/T7 Shield/P/core/out/test/classes/hello/core/beanfind/ApplicationContextSameBeanFindTest$SameBeanConfig.class]; nested exception is java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [/Volumes/T7 Shield/P/core/out/test/classes/hello/core/beanfind/ApplicationContextSameBeanFindTest$SameBeanConfig.class]; nested exception is java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0 at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.scanCandidateComponents(ClassPathScanningCandidateComponentProvider.java:457) at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:316) at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:276) at org.springframework.context.annotation.ComponentScanAnnotationParser.parse(ComponentScanAnnotationParser.java:128) at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:295) at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:249) at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:206) at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:174) at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:331) at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:247) at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:311) at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:112) at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:748) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:564) at org.springframework.context.annotation.AnnotationConfigApplicationContext.<init>(AnnotationConfigApplicationContext.java:93) at hello.core.scan.AutoAppConfigTest.basicScan(AutoAppConfigTest.java:17) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:725) 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:149) at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) 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.ExecutableInvoker.invoke(ExecutableInvoker.java:104) at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:214) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:210) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:135) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:66) 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:1541) 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:1541) 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:107) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) 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)Caused by: java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0 at org.springframework.asm.ClassReader.readStringish(ClassReader.java:3733) at org.springframework.asm.ClassReader.readClass(ClassReader.java:3748) at org.springframework.asm.ClassReader.accept(ClassReader.java:456) at org.springframework.asm.ClassReader.accept(ClassReader.java:426) at org.springframework.core.type.classreading.SimpleMetadataReader.<init>(SimpleMetadataReader.java:48) at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:103) at org.springframework.core.type.classreading.CachingMetadataReaderFactory.getMetadataReader(CachingMetadataReaderFactory.java:123) at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.scanCandidateComponents(ClassPathScanningCandidateComponentProvider.java:429) ... 84 moreProcess finished with exit code 255
-
미해결스프링 핵심 원리 - 기본편
프로토타입 스코프 강의 16:20초 질문입니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]강사께서 @AutowiredApplicationContext applicationContext; 이렇게 빈을 생성하는 과정 없이 바로 컨테이너를 주입받으셨는데, ApplicationContext는 스프링이 제공하는 기본 빈이기 때문에 가능한 부분인가요?