월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링 핵심 원리 - 기본편
Bean 생성 관련 문제 질문드립니다.
안녕하세요. 예제를 따라해 보다가, 문득 발견하였는데,bean들이 모두 매개변수 없이 사용이 되고 있습니다.그래서 매개변수를 주어서 bean으로 생성하려고 열심히 노력해 보았는데(수동설정 등등)계속 스프링이 bean을 찾을수 없다는 에러를 내는것 같습니다.예를들면 사람 인터페이스를 구현한 lee라는 클래스에서AppConfig ap = new AppConfig(); ap.personset(180,72);위와 같이 매개변수를 사람 객체를 생성하게 끔 던지고이것을 Appconfig에서 변수를 던져서 객체를 생성하려니 스프링이 알지 못합니다.@Bean public Person personset() { return new LEE(height,weight); } 하지만 매개변수를 주지 않고 아래와 같은 방식으로 하면 bean을 잘 찾아내는데, @Bean public Person personset(int height, int weight) { return new LEE(180,72); }스프링이 실행될 때 어떠한 방식으로 작동하는 지를 몰라서 그런지 이유를 모르겠습니다. 감사합니다.
- 미해결스프링 핵심 원리 - 기본편
@ComponentScan 질문
@ComponentScan( excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = Configuration.class) ) ComponentScan을 이용해서 configuration 어노테이션이 들어간 클래스들을 제외하고 component로 등록을 하는 것은 이해가 되는데AutoAppConfig 파일에도 @Configuration이 붙어 있는데AutoAppConfig 파일은 그러면 어떻게 되는 건가요? 상관이 없는건가요? 갑자기 궁금합니다.
- 해결됨스프링 핵심 원리 - 기본편
싱글톤 빈에 관하여 질문이 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 강의 잘 듣고 있습니다.해당 강의를 듣다가 의문점이 생겨서 질문 드립니다.강의에서는 싱글톤 빈 안에 프로토 타입 빈을 생성해서 테스트를 하는데 혹시 프로토 타입 빈에 싱글톤 빈을 넣으면 어떻게 되나 궁금해서 직접 테스트를 해보았습니다.그 결과 프로토 타입 빈은 따로 생성 되지만 싱글톤 빈은 각각의 프로토 타입 빈들이 모두 같은 싱글톤 객체를 사용했습니다.객체 변수의 static 과 매우 유사하게 작동하는데 싱글톤 빈의 객체 생성 시점이 컨테이너가 뜰때 생성되는지 아님 프로토 타입 빈을 생성할때 생성되는지 궁금합니다.그리고 혹시 제가 이해한 부분이 맞는지 궁금합니다. 감사합니다.
- 미해결스프링 핵심 원리 - 기본편
외부라이브러리 호출
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] 설정정보로 등록하면 외부라이브러리에도 초기화, 종료메서드를 적용할 수 있다는 것은 이해가 되었는데요. 그 외에는 외부라이브러리에 적용할수 없다는 말이 무슨 의미인지 잘 모르겠습니다. 질문을 여럿 찾아봤는데 질문이 조금 달라서..해결이 안됬네요DB커넥션 예를 들면, 초기화, 종료 메서드를 단순히 애노테이션(@PostConstruct, @PreDestroy)이 등록된 메서드안에서 호출하면, 그 안에서 호출된 여러 라이브러리 메서드처럼 결국엔, 굳이 설정정보사용안하고도 사용할수 있다(적용할수 있다)고 볼수 있는거 아닌가라고 생각이 듭니다.제가 지금 잘못 이해한거 같긴한데, 어디 부분을 잘못 이해해서 이런 생각을 하는건지 잘 모르겠습니다.
- 미해결스프링 핵심 원리 - 기본편
옵션 처리 강의에서 제가 잘 이해했는지 궁금합니다.
void AutowiredOPtion() 메서드 입니다. DI 컨테이너에 등록시키기 위하여 TestBean 클래스를 만들었고,스프링 컨테이너가 올라올 때 TestBean이 스프링 빈으로 등록되면서,스프링 컨테이너가 @Autowired 되어있는 것을 보고 의존관계를 주입 시키기 위해 3가지 메서드를 호출하고, 이 과정에서 값들이 출력되는 방식이 맞나요?
- 해결됨스프링 핵심 원리 - 기본편
isEqualTo 동작과정이 궁금합니다!
1.isEqualTo 동작과정이 궁금합니다!isEqualTo 양변이 Integer로 오토박싱이 일어난 후 Integerclass에 정의된 equals가 호출되면서 동등성 비교가 일어나는 건가요?2.isEqualTo vs isSameTo 가 헷갈립니다isSameTo는 동일성(객체주소) 비교고좌변 isEqualtTo는 좌변의 equals가 재정의가 되어 있지 않으면 동일성(객체주소)비교이고 재정의 되면 동등성(값비교)or재정의된 equals로 비교가 되는 걸로 정리하면 될까요?
- 미해결스프링 핵심 원리 - 기본편
싱글톤 패턴 단점이 이해가 안 갑니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]스프링을 사용하시기 전에 순수 자바 코드로 싱글톤 생성하신 다음에 싱글톤 패턴이 가질 수 있는 단점에 대해 설명해주셨습니다.싱글톤 패턴을 구현하는 코드 자체가 많이 들어간다. 의존관계상 클라이언트가 구체 클래스에 의존한다. private 생성자로 자식 클래스를 만들기 어렵다.이 중 1번,3번은 스프링에서 개선됨이 확실하게 보이는데 2번은 크게 달라진 점을 모르겠습니다.자바로만 싱글톤 만들었을 때 활용(SingletonService가 MemberService를 상속받았다고 가정했을 때)public class AppConfig { public MemberService memberService(){ return SingletonService.getInstance(); } }public class SingletonTest { @Test @DisplayName("스프링 없는 순수한 DI 컨테이너") void pureContainer() { AppConfig appConfig = new AppConfig(); MemberService memberService1 = appConfig.memberService(); // 활용 } }이렇게 만들면 의존관계상 클라이언트가 구체 클래스에 의존하지 않는 것 아닌가요?물론 다른 단점들이 다 고쳐지니 스프링을 안 쓸 이유가 없지만 DIP, OCP 개선을 중요하게 언급하신 것 같아서 넘어가기 찝찝하네요. 자바로 만들 때 DIP가 위반되는 이유가 뭔가요?
- 미해결스프링 핵심 원리 - 기본편
자동 빈 등록, 수동 빈 등록을 함께 사용하던 도중 에러 질문드립니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]최근 복습을 진행하며 자동 빈 등록, 수동 빈 등록에 관해 스스로 이것저것 해보다가 궁금한게 있어 질문 드립니다. 우선 AppConfig.class입니다.package com.example.asdfsadf.test; @Configuration public class AppConfig { private OrderService orderService; @Autowired public AppConfig(OrderService orderService) { this.orderService = orderService; } @Bean public OrderRepository orderRepository() { return new MemoryOrderRepository(); } }AppConfig.class에는 OrderService를 생성자 주입을 받고 있고, 수동으로 OrderRepository를 빈으로 등록하였습니다. 그리고 같은 패키지에 AppScanConfig.class를 두었습니다.package com.example.asdfsadf.test; @ComponentScan public class AppScanConfig { } 마지막으로 OrderService는 AppScanConfig에 의해 자동 빈 주입 받습니다.@Component public class OrderServiceImpl implements OrderService { private final OrderRepository orderRepository; public OrderServiceImpl(OrderRepository orderRepository) { this.orderRepository = orderRepository; } } 이때, 다음과 같이 단순히 AppScanConfig 정보를 바탕으로 컨테이너로 생성하도록 테스트 하였습니다.class appConfigTest { @Test public void test() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppScanConfig.class); } }결과는 다음과 같은 오류가 발생했습니다."C:\Program Files\Java\jdk-11.0.10\bin\java.exe" -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\lib\idea_rt.jar=59805:C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Users\kong\.m2\repository\org\junit\platform\junit-platform-launcher\1.8.2\junit-platform-launcher-1.8.2.jar;C:\Users\kong\.m2\repository\org\junit\platform\junit-platform-engine\1.8.2\junit-platform-engine-1.8.2.jar;C:\Users\kong\.m2\repository\org\opentest4j\opentest4j\1.2.0\opentest4j-1.2.0.jar;C:\Users\kong\.m2\repository\org\junit\platform\junit-platform-commons\1.8.2\junit-platform-commons-1.8.2.jar;C:\Users\kong\.m2\repository\org\apiguardian\apiguardian-api\1.1.2\apiguardian-api-1.1.2.jar;C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\lib\idea_rt.jar;C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\plugins\junit\lib\junit5-rt.jar;C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\plugins\junit\lib\junit-rt.jar;C:\Users\kong\Desktop\kong\asdfsadf\out\test\classes;C:\Users\kong\Desktop\kong\asdfsadf\out\production\classes;C:\Users\kong\Desktop\kong\asdfsadf\out\production\resources;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-data-jpa\2.7.6\7eef599012347f2fb7f84ba71eba10caf094dfb5\spring-boot-starter-data-jpa-2.7.6.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-web\2.7.6\9d0166a0390df593243bdc798ca7a1db20ddea9c\spring-boot-starter-web-2.7.6.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-test\2.7.6\38f4300b939115eae92c1a40ce6e75fe3bbeac00\spring-boot-starter-test-2.7.6.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-aop\2.7.6\23061de1832242610092f212f99d49b9a4955a9d\spring-boot-starter-aop-2.7.6.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-jdbc\2.7.6\9db6def4ba06a11b67f0de3eac83441d00350dd6\spring-boot-starter-jdbc-2.7.6.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\jakarta.transaction\jakarta.transaction-api\1.3.3\c4179d48720a1e87202115fbed6089bdc4195405\jakarta.transaction-api-1.3.3.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\jakarta.persistence\jakarta.persistence-api\2.2.3\8f6ea5daedc614f07a3654a455660145286f024e\jakarta.persistence-api-2.2.3.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.hibernate\hibernate-core\5.6.14.Final\71e407089b71ed7c6e99385fd851c308fed7be44\hibernate-core-5.6.14.Final.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.springframework.data\spring-data-jpa\2.7.6\8d0414f5cca5e31509943cd5f97cacdddd7c7384\spring-data-jpa-2.7.6.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.springframework\spring-aspects\5.3.24\e97d36c3e516d3dd0579437428b6e26902da0c88\spring-aspects-5.3.24.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-json\2.7.6\77017e2aa78224c3fa10444d659c2ce8765b910\spring-boot-starter-json-2.7.6.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter\2.7.6\d15341c0fc0b1d1362ce6c737b34679ad1f836c\spring-boot-starter-2.7.6.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-tomcat\2.7.6\ec920cd7f951f3cff3a0b7af80bb8f7116a3d8a5\spring-boot-starter-tomcat-2.7.6.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.springframework\spring-webmvc\5.3.24\33d2187c2bf1cb2c222bd1cc18b618736babcf3d\spring-webmvc-5.3.24.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.springframework\spring-web\5.3.24\d89bbcaabb1ff247a089875cbc4211bfe96c9a59\spring-web-5.3.24.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-test-autoconfigure\2.7.6\44a1fa836bafe21f00775c92694722a9fe95a5f5\spring-boot-test-autoconfigure-2.7.6.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-test\2.7.6\d4f2f397cc9351b6fc37278f482d950a3dc30157\spring-boot-test-2.7.6.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\com.jayway.jsonpath\json-path\2.7.0\f9d7d9659f2694e61142046ff8a216c047f263e8\json-path-2.7.0.jar;C:\Users\kong\.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;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.assertj\assertj-core\3.22.0\c300c0c6a24559f35fa0bd3a5472dc1edcd0111e\assertj-core-3.22.0.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.hamcrest\hamcrest\2.2\1820c0968dba3a11a1b30669bb1f01978a91dedc\hamcrest-2.2.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.junit.jupiter\junit-jupiter\5.8.2\5a817b1e63f1217e5c586090c45e681281f097ad\junit-jupiter-5.8.2.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.mockito\mockito-junit-jupiter\4.5.1\f81fb60bd69b3a6e5537ae23b883326f01632a61\mockito-junit-jupiter-4.5.1.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.mockito\mockito-core\4.5.1\ed456e623e5afc6f4cee3ae58144e5c45f3b3bf\mockito-core-4.5.1.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.skyscreamer\jsonassert\1.5.1\6d842d0faf4cf6725c509a5e5347d319ee0431c3\jsonassert-1.5.1.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.springframework\spring-test\5.3.24\dcad3d7fa11fe832005667ab074a54a9546a59ac\spring-test-5.3.24.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.springframework\spring-core\5.3.24\d095c329f30baf2b6d44eccbd2352d7a2f840c72\spring-core-5.3.24.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.xmlunit\xmlunit-core\2.9.0\8959725d90eecfee28acd7110e2bb8460285d876\xmlunit-core-2.9.0.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.springframework\spring-aop\5.3.24\efd01bc1048a2e1b6a7442fbd78170bc02c342b7\spring-aop-5.3.24.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.aspectj\aspectjweaver\1.9.7\158f5c255cd3e4408e795b79f7c3fbae9b53b7ca\aspectjweaver-1.9.7.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.springframework\spring-jdbc\5.3.24\909c19ab470a59b9fd23177d26b8e880733b15d4\spring-jdbc-5.3.24.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\com.zaxxer\HikariCP\4.0.3\107cbdf0db6780a065f895ae9d8fbf3bb0e1c21f\HikariCP-4.0.3.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.glassfish.jaxb\jaxb-runtime\2.3.7\ebcde6a44159eb9e3db721dfe6b45f26e6272341\jaxb-runtime-2.3.7.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.hibernate.common\hibernate-commons-annotations\5.1.2.Final\e59ffdbc6ad09eeb33507b39ffcf287679a498c8\hibernate-commons-annotations-5.1.2.Final.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.jboss.logging\jboss-logging\3.4.3.Final\c4bd7e12a745c0e7f6cf98c45cdcdf482fd827ea\jboss-logging-3.4.3.Final.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\net.bytebuddy\byte-buddy\1.12.19\178d26e6a95e50502ae16673e08269797f8b254a\byte-buddy-1.12.19.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\antlr\antlr\2.7.7\83cd2cd674a217ade95a4bb83a8a14f351f48bd0\antlr-2.7.7.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.jboss\jandex\2.4.2.Final\1e1c385990b258ff1a24c801e84aebbacf70eb39\jandex-2.4.2.Final.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\com.fasterxml\classmate\1.5.1\3fe0bed568c62df5e89f4f174c101eab25345b6c\classmate-1.5.1.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.springframework\spring-context\5.3.24\e48634d7b8f40d4d0fe978830be0247bfc2ff2cd\spring-context-5.3.24.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.springframework\spring-orm\5.3.24\256e029c2d8200294fe7fb5352ca2d1d7310dcad\spring-orm-5.3.24.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.springframework.data\spring-data-commons\2.7.6\e3d15a8f4d5ef0d2323569445c66903d0188cb68\spring-data-commons-2.7.6.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.springframework\spring-tx\5.3.24\175a2157fce17669af6d4db1d094cb4baaa5c8fd\spring-tx-5.3.24.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.springframework\spring-beans\5.3.24\e487ea6de09b9a7c36548028feeafa511a593532\spring-beans-5.3.24.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.slf4j\slf4j-api\1.7.36\6c62681a2f655b49963a5983b8b0950a6120ae14\slf4j-api-1.7.36.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.datatype\jackson-datatype-jsr310\2.13.4\e6d820112871f33cd94a1dcc54eef58874753b5\jackson-datatype-jsr310-2.13.4.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.module\jackson-module-parameter-names\2.13.4\858ccf6624b5fac6044813e845063edb6a62cf37\jackson-module-parameter-names-2.13.4.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.datatype\jackson-datatype-jdk8\2.13.4\557dbba5d8dfc7b7f944c58fe084109afcb5670b\jackson-datatype-jdk8-2.13.4.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-databind\2.13.4.2\325c06bdfeb628cfb80ebaaf1a26cc1eb558a585\jackson-databind-2.13.4.2.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-autoconfigure\2.7.6\4ad7e89accd25c69bfe84f52202deaf09430be2\spring-boot-autoconfigure-2.7.6.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot\2.7.6\f96f89eba708a591704db5dcbfc03e8822a503aa\spring-boot-2.7.6.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-logging\2.7.6\33a2d9e08d33a6a6f8051ed38daac14046e2f97c\spring-boot-starter-logging-2.7.6.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\jakarta.annotation\jakarta.annotation-api\1.3.5\59eb84ee0d616332ff44aba065f3888cf002cd2d\jakarta.annotation-api-1.3.5.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.yaml\snakeyaml\1.30\8fde7fe2586328ac3c68db92045e1c8759125000\snakeyaml-1.30.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.apache.tomcat.embed\tomcat-embed-websocket\9.0.69\c5da77c17a667b4e7a6bb01fb3b28c46c2717123\tomcat-embed-websocket-9.0.69.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.apache.tomcat.embed\tomcat-embed-core\9.0.69\27f2530eba96238aca56593bbd98edfdb038d9ef\tomcat-embed-core-9.0.69.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.apache.tomcat.embed\tomcat-embed-el\9.0.69\9c89a289c35b9ec20bdfb692a22dab87256bbe67\tomcat-embed-el-9.0.69.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.springframework\spring-expression\5.3.24\ae7410418e7b4bd27a01e3fb1c2fed35b2bc1e84\spring-expression-5.3.24.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\net.minidev\json-smart\2.4.8\7c62f5f72ab05eb54d40e2abf0360a2fe9ea477f\json-smart-2.4.8.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\jakarta.activation\jakarta.activation-api\1.2.2\99f53adba383cb1bf7c3862844488574b559621f\jakarta.activation-api-1.2.2.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.junit.jupiter\junit-jupiter-params\5.8.2\ddeafe92fc263f895bfb73ffeca7fd56e23c2cce\junit-jupiter-params-5.8.2.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.junit.jupiter\junit-jupiter-api\5.8.2\4c21029217adf07e4c0d0c5e192b6bf610c94bdc\junit-jupiter-api-5.8.2.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\net.bytebuddy\byte-buddy-agent\1.12.19\450917cf3b358b691a824acf4c67aa89c826f67e\byte-buddy-agent-1.12.19.jar;C:\Users\kong\.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;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.springframework\spring-jcl\5.3.24\2b30878663ceed2af07238dc54e92e5bf001438d\spring-jcl-5.3.24.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.glassfish.jaxb\txw2\2.3.7\55cddcac1945150e09b09b0f89d86799652eee82\txw2-2.3.7.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\com.sun.istack\istack-commons-runtime\3.0.12\cbbe1a62b0cc6c85972e99d52aaee350153dc530\istack-commons-runtime-3.0.12.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-annotations\2.13.4\858c6cc78e1f08a885b1613e1d817c829df70a6e\jackson-annotations-2.13.4.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-core\2.13.4\cf934c681294b97ef6d80082faeefbe1edadf56\jackson-core-2.13.4.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\ch.qos.logback\logback-classic\1.2.11\4741689214e9d1e8408b206506cbe76d1c6a7d60\logback-classic-1.2.11.jar;C:\Users\kong\.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;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.slf4j\jul-to-slf4j\1.7.36\ed46d81cef9c412a88caef405b58f93a678ff2ca\jul-to-slf4j-1.7.36.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\net.minidev\accessors-smart\2.4.8\6e1bee5a530caba91893604d6ab41d0edcecca9a\accessors-smart-2.4.8.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.apiguardian\apiguardian-api\1.1.2\a231e0d844d2721b0fa1b238006d15c6ded6842a\apiguardian-api-1.1.2.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.junit.platform\junit-platform-commons\1.8.2\32c8b8617c1342376fd5af2053da6410d8866861\junit-platform-commons-1.8.2.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.opentest4j\opentest4j\1.2.0\28c11eb91f9b6d8e200631d46e20a7f407f2a046\opentest4j-1.2.0.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\ch.qos.logback\logback-core\1.2.11\a01230df5ca5c34540cdaa3ad5efb012f1f1f792\logback-core-1.2.11.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.apache.logging.log4j\log4j-api\2.17.2\f42d6afa111b4dec5d2aea0fe2197240749a4ea6\log4j-api-2.17.2.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.ow2.asm\asm\9.1\a99500cf6eea30535eeac6be73899d048f8d12a8\asm-9.1.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\com.h2database\h2\2.1.214\d5c2005c9e3279201e12d4776c948578b16bf8b2\h2-2.1.214.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.junit.jupiter\junit-jupiter-engine\5.8.2\c598b4328d2f397194d11df3b1648d68d7d990e3\junit-jupiter-engine-5.8.2.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\org.objenesis\objenesis\3.2\7fadf57620c8b8abdf7519533e5527367cb51f09\objenesis-3.2.jar;C:\Users\kong\.gradle\caches\modules-2\files-2.1\com.sun.activation\jakarta.activation\1.2.2\74548703f9851017ce2f556066659438019e7eb5\jakarta.activation-1.2.2.jar;C:\Users\kong\.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 com.example.asdfsadf.test.appConfigTest,test 00:44:16.386 [main] DEBUG org.springframework.context.annotation.AnnotationConfigApplicationContext - Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@a38c7fe 00:44:16.416 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalConfigurationAnnotationProcessor' 00:44:16.520 [main] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Identified candidate component class: file [C:\Users\kong\Desktop\kong\asdfsadf\out\production\classes\com\example\asdfsadf\test\AppConfig.class] 00:44:16.526 [main] DEBUG org.springframework.context.annotation.ClassPathBeanDefinitionScanner - Identified candidate component class: file [C:\Users\kong\Desktop\kong\asdfsadf\out\production\classes\com\example\asdfsadf\test\OrderServiceImpl.class] 00:44:16.691 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.event.internalEventListenerProcessor' 00:44:16.694 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.event.internalEventListenerFactory' 00:44:16.697 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalAutowiredAnnotationProcessor' 00:44:16.701 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalCommonAnnotationProcessor' 00:44:16.711 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalPersistenceAnnotationProcessor' 00:44:16.720 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'appScanConfig' 00:44:16.728 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'appConfig' 00:44:16.738 [main] DEBUG org.springframework.core.LocalVariableTableParameterNameDiscoverer - Cannot find '.class' file for class [class com.example.asdfsadf.test.AppConfig$$EnhancerBySpringCGLIB$$f7a36e2b] - unable to determine constructor/method parameter names 00:44:16.745 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'orderServiceImpl' 00:44:16.748 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'orderRepository' 00:44:16.749 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'appConfig' 00:44:16.750 [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 'appConfig' defined in file [C:\Users\kong\Desktop\kong\asdfsadf\out\production\classes\com\example\asdfsadf\test\AppConfig.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'orderServiceImpl' defined in file [C:\Users\kong\Desktop\kong\asdfsadf\out\production\classes\com\example\asdfsadf\test\OrderServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'appConfig': Requested bean is currently in creation: Is there an unresolvable circular reference? org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'appConfig' defined in file [C:\Users\kong\Desktop\kong\asdfsadf\out\production\classes\com\example\asdfsadf\test\AppConfig.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'orderServiceImpl' defined in file [C:\Users\kong\Desktop\kong\asdfsadf\out\production\classes\com\example\asdfsadf\test\OrderServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'appConfig': Requested bean is currently in creation: Is there an unresolvable circular reference? at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800) at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) at org.springframework.context.annotation.AnnotationConfigApplicationContext.<init>(AnnotationConfigApplicationContext.java:93) at com.example.asdfsadf.test.appConfigTest.test(appConfigTest.java:13) 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:71) 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:235) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54) Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'orderServiceImpl' defined in file [C:\Users\kong\Desktop\kong\asdfsadf\out\production\classes\com\example\asdfsadf\test\OrderServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'appConfig': Requested bean is currently in creation: Is there an unresolvable circular reference? at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800) at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887) at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) ... 83 more Caused by: org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'appConfig': Requested bean is currently in creation: Is there an unresolvable circular reference? at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.beforeSingletonCreation(DefaultSingletonBeanRegistry.java:355) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:227) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:410) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887) at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) ... 97 more Process finished with exit code -1 근데 AppConfig에서 OrderService를 생성자 주입이 아닌 필드 주입으로 하면 오류가 발생하지 않고 정상적으로 빈 등록이 완료되었습니다. (필드 주입으로 하더라도 AppConfig의 이름을 zAppConfig로 해서 패키지의 가장 아래에 놓이게 해도 에러가 발생합니다.) 제가 생각한 오류 원인은 이렇습니다.AppScanConfig를 설정 파일로 지정했기 때문에 가장 먼저 빈으로 등록패키지의 가장 위에 있는 @Component 클래스인 AppConfig를 빈으로 등록AppConfig를 빈으로 등록하는 과정에서 생성자 주입으로 OrderService를 빈으로 등록하려함OrderService를 빈으로 등록하려고 봤더니 OrderRepository를 의존하고 있어서 OrderRepository를 빈으로 등록하려함OrderRepository를 빈으로 등록하기 위해서 AppConfig에 접근AppConfig는 OrderService를 의존하고 있어서 OrderService를 빈으로 등록하기 위해 이동...-> 순환 참조 문제라고 생각했습니다. 하지만 OrderRepository만 빈으로 등록하면 될 문제 같은데 위 상황에서 왜 되지 않는건지 명확하게 이해가 가지 않아서 질문드립니다! 어떤 문제 때문에 에러가 발생하는 걸까요 ??
- 미해결스프링 핵심 원리 - 기본편
for문을 통한 Bean 출력
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의를 들으면서 Bean 이름을 출력을 하는 과정에서 for문에 forEach를 통해서 이름들을 전부 출력하는걸로 이해를 하고 있는데 Object bean의 경우 컨테이너에 있는 Bean 이름과 같은 Bean 정보를 Object 형태로 담아서 출력을 하는게 맞는걸까요 ??@Test @DisplayName("애플리케이션 빈 출력하기") void findApplicationBean(){ String[] beanDefinitionNames = ac.getBeanDefinitionNames(); // iter 자동 for문 생성 for (String beanDefinitionName : beanDefinitionNames) { BeanDefinition beanDefinition = ac.getBeanDefinition(beanDefinitionName); // .getRole() : 스프링이 내부에서 사용하는 빈 // Role ROLE_APPLICATION : 직접 등록한 애플리케이션 빈 // Role ROLE_INFRASTRUCTURE : 스프링이 내부에서 사용하는 빈 if(beanDefinition.getRole() == BeanDefinition.ROLE_APPLICATION){ Object bean = ac.getBean(beanDefinitionName); // soutv : 변수명 출력 , soutm : 메서드명 출력 System.out.println("bean = " + beanDefinitionName + " object = " +bean); } } }
- 미해결스프링 핵심 원리 - 기본편
스프링 컨테이너를 생성하면서 스프링 빈 등록하기
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]현재 7강 의존관계 자동주입 편을 듣던중 의문이 생겨 질문합니다.AutoAppConfig.class에 이미 ComponentScan이 붙어 스프링 컨테이너가 생성된상태에서 테스트 코드에서 new annotationConfigApplicationContext(AutoAppConfig.class,DiscountService.class); 를 통해 스프링 컨테이너를 또 만드는 행위는 AutoAppConfig 클래스 자체 또한 스프링 빈으로 등록하기 위해서 하는 행위인가요?
- 해결됨스프링 핵심 원리 - 기본편
MemberApp 실행시 질문입니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.현재 m1 맥북을 사용하며 강의를 따라가고 있는데 MemberApp 클래스에서 실행시 결과가new member 와 find Member 의 = 다음으로 저렇게 나옵니다.강의에서의 실행결과가 똑같이 나오게 하려면 어떻게 해야 할까요?
- 해결됨스프링 핵심 원리 - 기본편
javax.inject Provider 주입 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요.build.gradle에 다음과 같이 Provider를 적용하도록 설정하였습니다.또, 강의처럼 PrototypeProviderTest 클래스 코드를 작성하였습니다.그러나 ClientBean에서 javax.inject의 Provider를 사용하려고 할 시 (2번 방식), No qualifying bean of type 'javax.inject.Provider<hello.core.scope.PrototypeProviderTest$PrototypeBean>' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 라는 오류가 발생하고 있는 상황입니다.때문에 직접 문제를 해결해보려고 Autowired를 받는 방식 말고 new Provider<PrototypeBean>() {...} 를 해 봤으나, 해당 문제가 해결되긴 하나 원래 목적과 부합하지 않다고 생각이 들었습니다.버전이 달라졌기 때문에 발생하는 오류인 것일까요?@Autowired(required = false)로 테스트 해 보면 Cannot invoke "javax.inject.Provider.get()" because "this.provider" is null 로 제대로 스프링 컨테이너에 PrototypeBean이 등록이 안 된 듯한 오류가 발생하였습니다. PrototypeBean은 이렇게 작성 해 두었습니다.
- 미해결스프링 핵심 원리 - 기본편
"@RequiredArgsConstructor" 를 사용하면 @Autowired도 같이 적용되나요?
안녕하세요.강의 내용중 @RequiredArgsConstructor를 사용하시면자동으로 생성되는 생성자에 스프링컨테이너가 자동으로 빈들을 주입하나요?
- 미해결스프링 핵심 원리 - 기본편
findMember.getName()
findMember = memberService.findMember(1L)이거를 하게 되면 주소값으로 나오게 되는데 왜 값이 안나오고 저렇게 나오게 되나요?반드시 getName 함수를 통해야만 제가 원하는 값이 나오나요?
- 해결됨스프링 핵심 원리 - 기본편
테스트 코드 작성 질문입니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요! 백엔드 개발자를 꿈꾸는 대학생입니다.Spring 프로젝트를 진행하면서 테스트 코드를 작성하다가 궁금한 점이 생겨서 글을 작성하게 되었습니다.질문 1.querydsl을 사용해서 업데이트를 하고 정상적으로 변경되었는지 JPA를 사용해 엔티티를 가져와서 확인할 때 1차 캐시에 값을 가져와서 예상과 다른 결과가 발생했습니다.캐시에서 값을 가져오지 않게하기 위해서 테스트 코드 내에 entityManager.clear()를 사용하였는데 테스트 코드 내에서 clear() 메소드를 사용하는 것이 안 좋은 코드인지 궁금합니다.질문 2.위의 문제를 해결하기 위해서 JPA의 dirty checking을 이용하도록 코드를 수정했습니다.제가 공부하기로는 dirty checking은 변경된 부분만 변경하지 않고 모든 필드를 수정하기 때문에 많은 쿼리를 발생시켜 성능적으로 떨어질 수 있다고 알고 있습니다.그렇다면 필드가 적을 경우에는 dirty checking을 사용해도 무방한 지와만약에 dirty checking을 지양하는 다른 이유가 있다면 어떤 이유인지 궁금합니다.질문 3.김영한 개발자님이 생각하시는 잘 작성된 테스트 코드란 무엇인가?가 너무 궁금합니다! 강의 내용과 약간? 무관한 내용인 것 같아서 죄송합니다..!
- 해결됨스프링 핵심 원리 - 기본편
'주문과 할인 도메인 실행과 테스트' 강의에서 질문합니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요.'주문과 할인 도메인 실행과 테스트' 강의의 4:41 부분입니다.OrderServiceTest 는 memberService와 orderService 둘을 모두 인스턴스로 갖고 있습니다. 19줄에서 memberService.join(member)를 하게 되면, memberService가 가리키고 있는 memberRepository에 member를 저장하게 됩니다. 그러나 orderService가 가리키는 memberRepository에는 위에서 저장한 member가 저장되지 않습니다. 그래서 제가 해보았을때, 21줄에서 Order order = orderService.createOrder(memberId, "itemA", 10000); 이 부분에서 NullPointerException이 발생생하였습니다. 그런데 강의에서는 해당 테스트 코드가 정상적으로 통과가 되더라구요. 분명 지금까지의 강의에서는 다른 추가적인 설정이나 이런것들이 없는것 같은데, 어떻게 통과가 될 수 있었는지 의아합니다.제가 작성한 MemberServiceImpl와 OrderServiceImpl도 첨부합니다.
- 미해결스프링 핵심 원리 - 기본편
XmlAppContext 실행시 오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/)[질문 내용]이 오류가 왜 뜨는지 모르겠습니다. 강의자료 복붙해서 xml파일 작성했고 테스트도 똑같이 작성했는데 안됩니다...ㅠㅠ
- 미해결스프링 핵심 원리 - 기본편
스프링 DB 접근 1편 2편 질문입니다.
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 아니오2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 네3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 네[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요 스프링 DB관련편 1편을 생략하고 바로 2편을 들어도 문제가 없을까요?
- 미해결스프링 핵심 원리 - 기본편
DL (의존관계 조회)와 DI (의존관계 주입)
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]다른 질문을 참고하면서 Provider를 통해서 싱글톤 빈을 DL 하는 경우에는 싱글톤 빈이 생성되는 것이 아니라 조회된다.프로토타입은 조회할 때마다 새로 생성되는 것으로 DL은 컨테이너를 통해서 빈을 찾아온다고 생각하면 된다.를 보고 싱글톤 빈을 DL 하는 경우에 대하여 의문이 생겼는데 이 과정이 DI (의존관계 주입)과 별 차이가 없다고 느껴졌는데 (프로토타입은 새로 생성되니까 차이가 있다고 생각했습니다.) 싱글톤 빈의 경우에도 의존관계 주입을 할 때 이름이 같은 빈을 찾아서 주입한다고 배워서 조회하는 것과 차이가 없다고 생각이 들었습니다. 둘의 차이가 있는 것인가요??
- 미해결스프링 핵심 원리 - 기본편
@Configuration 질문
package hello.core.lifecycle; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.TestConfiguration; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; public class BeanLifeCycleTest { @Test public void lifeCycleTest(){ ConfigurableApplicationContext ac = new AnnotationConfigApplicationContext(LifeCycleConfig.class); System.out.println("1"); NetworkClient client = ac.getBean(NetworkClient.class); System.out.println("2"); ac.close(); } @Configuration// static class LifeCycleConfig { @Bean public NetworkClient networkClient() { NetworkClient networkClient = new NetworkClient(); networkClient.setUrl("http://hello-spring.dev"); return networkClient; } } }여기서요, LifeCycleConfig에 @Configuration이 붙으나 안붙으나,AnnotationConfigApplicationContext에 인자로 주면 똑같은거 아닌가요?Bean newworkClient 에 따로 스코프 설정도 안했으니까요... 아닌가요?