묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결홍정모의 게임 만들기 연습 문제 패키지
따배C++ 몇 강까지 학습한 후 수강가능 할까요?
현재 따배c++을 수강중입니다. 뭔가를 빨리 만들어 보며 실전 위주로 공부하고 싶어서 게임 페키지도 구매하였습니다. 게임 패키지 강의 소개에 12강 기준이라는 글을 봤는데 따배c++ 강의 12강까지 수강하면 게임 페키지 강의를 듣는데 문제가 없을까요?
-
미해결[코드팩토리] [입문] Dart 언어 4시간만에 완전정복
for loop
void main() { int total = 0; for (int i = 0; i < 10; i++) { total += 1; if (total == 5) { break; } } print(total); } ->5 여기서 0이였던 i 값이 1(i++)이되고 total 은 1이 되며(total+=1) 또 반복으로 i 값이 2가되고 total 은 2가 되고 쭉 반복되어 total 이 5가되었을때 나와서 출력된거맞나요?
-
미해결[코드팩토리] [입문] Dart 언어 4시간만에 완전정복
list map set
안녕하세요 강의 잘 듣고있습니다.컬렉션List<data type> 변수 = ['지수', '제니'];Map <key:value> 변수 = { 'key' : 'value'};Set<data type> 변수 ' { ........};enum Status {..}List 만 [] 대괄호 나머지는 {}중괄호를 쓰는 이유가 뭔가요 그냥 공식일까요? 그리고enum Status {approved,pending,rejected }void main() {Status status = Status.approved; print(status); }이 예제에서 Status는 키워드 인가요?
-
미해결자바 기초부터 마스터하기 with 은종쌤 (Do it 자바 프로그래밍 입문) - Part 2(마스터편)
예외처리 질문드려요
package exceptions; import java.io.FileInputStream; import java.io.FileNotFoundException; public class ThrowsExceptionTest { public Class loadClass(String fileName, String className) throws FileNotFoundException, ClassNotFoundException { FileInputStream fis = new FileInputStream(fileName); Class c = Class.forName(className); } public static void main(String[] args) { ThrowsExceptionTest test = new ThrowsExceptionTest(); try { test.loadClass("a.txt", "java.lang.Sting"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } }a.txt는 없고, 클래스도 찾을 수 없게 만들어진 상태인데요.제가 원하는건 콘솔창에서 FileNotFoundException, ClassNotFoundException 을 보는건데두개 조건을 충족함에도 FileNotFoundException만 출력되고 ClassNotFoundException 출력이 되지 않아요. 어떤 문제일까요?
-
해결됨스프링 핵심 원리 - 기본편
ComponentScan했을시에 스프링 컨테이너 선언
@ComponentScan과 @Autowired를 사용했으면 MemberApp과 OrderApp의 ApplicationContext를 사용하는 부분은 어떻게 변경해야하나요?ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);MemberService memberService = ac.getBean("memberService",MemberService.class);OrderService orderService = ac.getBean("orderService",OrderService.class);해당 부분에서 ApplicationContext ac 선언 문에서 인자를 AutoAppConfig로 바꿔보니 shared bean을 사용하고 있고 에러가 나서요...
-
미해결스프링 핵심 원리 - 기본편
스프링 핵심원리 컴포넌트 스캔 질문:NoSuchBeanDefinitionException
지금 실행해보면 아래와 같은 에러가 나오는데 어떻게 하면 해결할 수 있는지 알려주시면 감사하겠습니다!org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'hello.core.member.MemberService' available
-
미해결자바 기초부터 마스터하기 with 은종쌤 (Do it 자바 프로그래밍 입문) - Part 1(기초편)
upgradeLevel에 인수를 넣기 위해 새로 AdvancedLevel 과 같은 instance를 생성하는게 어색하게 느껴집니다.
안녕하세요 강의 잘 듣고 있습니다.저는 upgradeLevel 을 하기 위해서 새로 인스턴스를 생성하고 넘겨주는 방식이 아닌 게임처럼 한단계씩 업그레이드 되는 방식으로 구현하고 싶습니다. 그래서 다음과 같이 생각해서 적어봤는데, 2가지 문제가 있는것 같습니다. 어떻게 하면 될까요? public BeginnerLevel level = new BeginnerLevel(); public void upgradeLevel(PlayerLevel level) { // if(level.levelName ) if (level instanceof BeginnerLevel) { level = new AdvancedLevel(); } else if (level instanceof AdvancedLevel) { level = new SuperLevel(); } else if (level instanceof SuperLevel) { System.out.println("you are already highest level"); } }첫째로 instanceof를 잘못쓰고 있는 것 같고, 둘째로 level = new AdvancedLevel() 이런식으로 재정의 하는게 가능한가요? 궁금합니다.
-
미해결스프링 핵심 원리 - 기본편
스프링빈 등록시점관련
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.스프링빈이 @Bean 메서드에서 return 되는 시점에 객체가 빈으로 등록되는게 아니라 new 연산자로 생성하는 시점에 빈이 되는 건가요???리턴하는 코드보다 의존관계 주입하는 코드가 먼저 있는데 (NetworkClient networkClient = new NetworkClient(); networkClient.setUrl("https://www.naver.com"); return networkClient;)스프링 컨테이너 생성→ 스프링 빈 생성 →의존관계 주입→ 초기화 콜백 이 순서에서 보면 빈이 new 로 생성되고 주입받고 return 하는 것 같아서요 .. .. 지금까지는 return new 객체 패턴으로 스프링에 빈을 등록했어서 조금 헷갈립니다.
-
미해결스프링 핵심 원리 - 기본편
AllBeanTest시 왜 NullpointException 에러가 발생하나요 ㅠ
sout 으로 policyMap과 policies에 값이 fixDiscount와 RateDiscount가 들어가있는걸 확인했는데 왜 널포인트에러가 발생할까요 ㅠ package hello.core.autowired.AllBeanTest; import hello.core.AutoAppConfig; import hello.core.discount.DiscountPolicy; import hello.core.member.Grade; import hello.core.member.Member; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import java.util.List; import java.util.Map; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; public class AllBeanTest { @Test void findAllBean() { ApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class, DiscountService.class); DiscountService discountService = ac.getBean(DiscountService.class); Member member = new Member(1L, "userA", Grade.VIP); int discountPrice = discountService.discount(member, 10000,"fixDiscountPolicy"); Assertions.assertThat(discountService).isInstanceOf(DiscountService.class); assertThat(discountPrice).isEqualTo(1000); } static class DiscountService { private final Map<String, DiscountPolicy> policyMap; private final List<DiscountPolicy> policies; @Autowired public DiscountService(Map<String, DiscountPolicy> policyMap, List<DiscountPolicy> policies) { this.policyMap = policyMap; this.policies = policies; System.out.println("policyMap = " + policyMap); System.out.println("policies = " + policies); } public int discount(Member member, int price, String discountCode) { DiscountPolicy discountPolicy = policyMap.get(discountCode); return discountPolicy.discount(member, price); } } }
-
미해결스프링 핵심 원리 - 기본편
안녕하세요 강사님 정적인 클래스/동적인 객체의 기본적인 개념이 헷갈려서 질문드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (그런것 같습니다.)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용] 의존관계는 정적인 클래스의존 관계와 실행 시점에 결정되는 동적인 객체 의존관계 둘을 분리해야한다라고강의에서 들은 바가 있는 것 같습니다.여기서 딱 잘라 명사만 놓고 보자면정적인 클래스는 인터페이스동적인 객체는 구현클래스라고 생각해도 괜찮을까요?
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
퀴즈 7번에 관하여 질문있습니다!
안녕하세요! 정말 감사한 마음으로 강의 수강 중인 대학생입니다퀴즈 7번에 관해서 2가지 질문있습니다. 처음에 아래와 같이 System.out.println(this.name + "를 만듭니다. "); 를 cook 메소드에 넣지 않고 HamBurger 메소드에 넣어서 틀렸습니다. 이외에 모든 코드는 선생님것과 동일합니다class HamBurger{ public String name; HamBurger() { //생성자 this("햄버거"); System.out.println(this.name + "를 만듭니다. "); } HamBurger(String name) { //매개변수를 받는 생성자 this.name = name; } void cook(){ System.out.println("빵 사이에 들어가는 재료는?"); System.out.println("> 양상추 "); System.out.println("+ 패티 "); System.out.println("+ 피클 "); } }왜 HamBurger()에 system.out.println(this.name + "를 만듭니다. ");를 작성하면 안되나요?혹시 그 이유가 생성자와 void메소드는 반환값이 없다고 했는데요,제가 작성한 HamBurger()는 System.out.println(this.name + "를 만듭니다. ");라는 반환값을 만든 것이기 때문인가요?그러면 cook 메소드는 void가 있는데 값을 반환하는 것은 어찌된 것일까요.... 모르겠습니다 흑흑 2. public class Quiz07 에서 cook만 호출했기 때문에 Hamburger메소드에 작성한 System.out.println(this.name + "를 만듭니다. ");가 뜨면 안된다고 생각했는데햄버거를 만듭니다. 주문하신 메뉴를 만듭니다. ------------------- 빵 사이에 들어가는 재료는? > 양상추 + 패티 + 피클 ..."햄버거를 만듭니다" 가 for반복문이 실행되기도 전에 처음에 한번 떴습니다. 호출하지 않았는데 왜 출력된건가요?? 도와주세요!!
-
미해결[코드팩토리] [입문] Dart 언어 4시간만에 완전정복
2강부터 너무 어렵네요
1강을 3번 정도 보면서 익히려고 노력하는데 머릿속에 다 들어오거나 외운 느낌은 아니에요. 그렇게 2강을 듣기 시작했는데 너무 어렵네요. 공부방법을 어떻게 하면 좋죠? 1강은 강사님이 알려주신거 코드 직접해보고 자료로만들고 했는데... 2강오니 이해안되는 부분들이 많아요.
-
미해결스프링 핵심 원리 - 기본편
CoreApplication 실행안됨
잘 실행됐었고 아무것도 건든게 없는데 갑자기 실행버튼 비활성화 돼서Configuration에서 메인 클래스 지정하려는데 안되고캐시 초기화해도 안되고Reload all from disk 해도 안되고Mark directory as 로 Sources Root로 설정해도 안되고.idea 폴더 삭제해도 다시 생성되고 다 안되는데도와주시면 감사하겠습니다..
-
미해결스프링 핵심 원리 - 기본편
MyLogger 를 Interceptor 로 구현 시 질문
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]안녕하세요? 강의를 듣다가 requesURL 같은 경우 Interceptor 에서 멤버 변수로 저장하는 것이 좋다고 해서 구현을 해보려고 했는데 문제가 생겨서 질문 드립니다.## 앞으로 강좌를 계속 듣긴 할 거라서 혹시 뒤의 강좌를 듣고 나면 해결될 수 있는 문제라면 어느 강좌인지 알려주셔도 될 것 같습니다. MyLogger.javapackage hello.core.common; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import java.util.UUID; @Component @Scope(value = "request") public class MyLogger { private String uuid; private String requestURL; public void setRequestURL(String requestURL) { this.requestURL = requestURL; } public void log(String message) { System.out.println("[" + uuid + "]" + "[" + requestURL + "] " + message); } @PostConstruct public void init() { uuid = UUID.randomUUID().toString(); System.out.println("[" + uuid + "] request scope bean create: " + this); } @PreDestroy public void close() { System.out.println("[" + uuid + "] request scope bean close: " + this); } } CoreInterceptor.javapackage hello.core.common; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.ObjectProvider; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @Component @RequiredArgsConstructor public class CoreInterceptor implements HandlerInterceptor { private final ObjectProvider<MyLogger> myLoggerProvider; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("CoreInterceptor.preHandle"); String requestURL = request.getRequestURL().toString(); MyLogger myLogger = myLoggerProvider.getObject(); myLogger.setRequestURL(requestURL); return HandlerInterceptor.super.preHandle(request, response, handler); } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { HandlerInterceptor.super.postHandle(request, response, handler, modelAndView); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { HandlerInterceptor.super.afterCompletion(request, response, handler, ex); } } WebMvcConfig.javapackage hello.core.common; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.ObjectProvider; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration @RequiredArgsConstructor public class WebMvcConfig implements WebMvcConfigurer { private final ObjectProvider<MyLogger> myLoggerProvider; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new CoreInterceptor(myLoggerProvider)).excludePathPatterns("/css/**", "/images/**", "/js/**"); } } LogDemoController.javapackage hello.core.web; import hello.core.common.MyLogger; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.ObjectProvider; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; @Controller @RequiredArgsConstructor public class LogDemoController { private final LogDemoService logDemoService; private final ObjectProvider<MyLogger> myLoggerProvider; @RequestMapping("log-demo") @ResponseBody public String logDemo(HttpServletRequest request) { String requestURL = request.getRequestURL().toString(); MyLogger myLogger = myLoggerProvider.getObject(); myLogger.log("controller test"); logDemoService.logic("testId"); return "OK"; } } LogDemoService.javapackage hello.core.web; import hello.core.common.MyLogger; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.ObjectProvider; import org.springframework.stereotype.Service; @Service @RequiredArgsConstructor public class LogDemoService { private final ObjectProvider<MyLogger> myLoggerProvider; public void logic(String id) { MyLogger myLogger = myLoggerProvider.getObject(); myLogger.log("service id = " + id); } } 위와 같이 이렇게 구현을 해보니 문제가 생기는데...일단, 인터셉터를 스프링 빈으로 등록하면서 MyLogger 를 활용하려면 알려주신 ObjectProvider 를 사용해야 할 것 같은데... WebMvcConfig 에서 인터셉터를 등록하는 경우, 위의 경우처럼 처음 서버 구동 시에 처리되어야 하는데 이 때는 reqeust 를 사용할 수 없는 문제입니다. 앞서 이 문제를 ObjectProvider 로 해결했는데 Interceptor 의 경우, 나중에 등록이 안 될 것 같은데 이런 경우 어떻게 해결해야 될까요?저렇게 인터셉터를 null 로 호출하니 실행해 보면 WebMvcConfig.java -> registry.addInterceptor(new CoreInterceptor(null))...java.lang.NullPointerException: Cannot invoke "org.springframework.beans.factory.ObjectProvider.getObject()" because "this.myLoggerProvider" is null위와 같은 에러가 발생합니다.관련된 소스 첨부하였습니다.도움 부탁 드립니다. 위의 소스는 제대로 된 걸로 다시 첨부하였습니다.registry.addInterceptor(new CoreInterceptor(null))...->private final ObjectProvider<MyLogger> myLoggerProvider; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new CoreInterceptor(myLoggerProvider)).excludePathPatterns("/css/**", "/images/**", "/js/**"); } 위와 같이 수정하였습니다. 이런 저런 버그들과 강의에서 가르쳐 주신 ObjectProvider 를 사용해서 설정파일에서 request 가 들어오는 시점에 로그를 주입해서 처리되도록 수정하였습니다.Interceptor 에서는 왜 ObjectProvider 를 사용하지 못할 거라고 생각했는지 모르겠네요. 답변 글 보고 질문을 수정하다가 생각이 나서 소스를 수정해 보니 잘 되는 것 같네요.감사합니다.
-
해결됨스프링 핵심 원리 - 기본편
애플리케이션 빈 출력하기
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]이렇게 위에 다 뜨는데 맞게 뜬건가요??
-
미해결스프링 핵심 원리 - 기본편
Mac OS 기반 인텔리제이 Spring boot 프로젝트 생성 시 발생한 오류
Mac OS 기반 인텔리제이를 설치하고 처음 Spring boot(gradle) 프로젝트 생성 시인텔리제이에서 build하는 과정에서 다음과 같은 오류가 발생합니다.구글링을 해봐도 어떤게 원인인지 해결 방안을 모르겠어서 질문 남겨요! * Exception is: org.gradle.api.UncheckedIOException: java.io.StreamCorruptedException: invalid type code: 00 at org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java:62) at org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java:41) at org.gradle.tooling.internal.provider.serialization.PayloadSerializer.deserialize(PayloadSerializer.java:78) at org.gradle.tooling.internal.provider.runner.ClientProvidedPhasedActionRunner.run(ClientProvidedPhasedActionRunner.java:51) at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35) at org.gradle.internal.buildtree.ProblemReportingBuildActionRunner.run(ProblemReportingBuildActionRunner.java:49) at org.gradle.launcher.exec.BuildOutcomeReportingBuildActionRunner.run(BuildOutcomeReportingBuildActionRunner.java:65) at org.gradle.tooling.internal.provider.FileSystemWatchingBuildActionRunner.run(FileSystemWatchingBuildActionRunner.java:140) at org.gradle.launcher.exec.BuildCompletionNotifyingBuildActionRunner.run(BuildCompletionNotifyingBuildActionRunner.java:41) at org.gradle.launcher.exec.RootBuildLifecycleBuildActionExecutor.lambda$execute$0(RootBuildLifecycleBuildActionExecutor.java:40) at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:122) at org.gradle.launcher.exec.RootBuildLifecycleBuildActionExecutor.execute(RootBuildLifecycleBuildActionExecutor.java:40) at org.gradle.internal.buildtree.InitDeprecationLoggingActionExecutor.execute(InitDeprecationLoggingActionExecutor.java:58) at org.gradle.internal.buildtree.DefaultBuildTreeContext.execute(DefaultBuildTreeContext.java:40) at org.gradle.launcher.exec.BuildTreeLifecycleBuildActionExecutor.lambda$execute$0(BuildTreeLifecycleBuildActionExecutor.java:65) at org.gradle.internal.buildtree.BuildTreeState.run(BuildTreeState.java:53) at org.gradle.launcher.exec.BuildTreeLifecycleBuildActionExecutor.execute(BuildTreeLifecycleBuildActionExecutor.java:65) at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor$3.call(RunAsBuildOperationBuildActionExecutor.java:61) at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor$3.call(RunAsBuildOperationBuildActionExecutor.java:57) at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204) at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199) at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66) at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59) at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157) at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59) at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53) at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73) at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor.execute(RunAsBuildOperationBuildActionExecutor.java:57) at org.gradle.launcher.exec.RunAsWorkerThreadBuildActionExecutor.lambda$execute$0(RunAsWorkerThreadBuildActionExecutor.java:36) at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:249) at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:109) at org.gradle.launcher.exec.RunAsWorkerThreadBuildActionExecutor.execute(RunAsWorkerThreadBuildActionExecutor.java:36) at org.gradle.tooling.internal.provider.continuous.ContinuousBuildActionExecutor.execute(ContinuousBuildActionExecutor.java:110) at org.gradle.tooling.internal.provider.SubscribableBuildActionExecutor.execute(SubscribableBuildActionExecutor.java:64) at org.gradle.internal.session.DefaultBuildSessionContext.execute(DefaultBuildSessionContext.java:46) at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter$ActionImpl.apply(BuildSessionLifecycleBuildActionExecuter.java:100) at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter$ActionImpl.apply(BuildSessionLifecycleBuildActionExecuter.java:88) at org.gradle.internal.session.BuildSessionState.run(BuildSessionState.java:69) at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter.execute(BuildSessionLifecycleBuildActionExecuter.java:62) at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter.execute(BuildSessionLifecycleBuildActionExecuter.java:41) at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:64) at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:32) at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:50) at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:38) at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:47) at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:31) at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:65) at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:39) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:29) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:35) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:78) at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:75) at org.gradle.util.internal.Swapper.swap(Swapper.java:38) at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:75) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:64) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:63) at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:84) at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:52) at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:297) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:49)
-
미해결스프링 핵심 원리 - 기본편
파라미터가 있는 빈을 필드주입 할 때
@Slf4j @SpringBootTest public class InternalCallV2Test { ##1## @Autowired CallService callService; @Test void internalCallV2(){ callService.external(); } @TestConfiguration static class InternalCallV1TestConfig{ @Bean CallService callService(){ return new CallService(internalService()); } @Bean InternalService internalService(){return new InternalService();} } @RequiredArgsConstructor static class CallService{ ##2## private final InternalService internalService; public void external(){ internalService.internal(); } } static class InternalService{ public void internal(){ } } }위와 같은 코드가 있을 때(1) 필드 주입@Autowired CallService callService;에서 callService이름의 빈을 찾아 객체를 주입 받습니다.(2) 생성자 주입@RequiredArgsConstructor static class CallService{ private final InternalService internalService;}에서 CallService의 생성자에 @Autowired를 통해 의존관계를 자동으로 주입받습니다.제가 궁금한건 빈을 등록할 때@Bean CallService callService(){ return new CallService(internalService());}CallService는 파라미터가 있는객체로 등록되는데 필드주입을 하게되면 그냥 CallService객체를 주입 받는 건가요????(파라미터가 있는 지 무시하고)생성자 주입은 파라미터가 있으니까 어떤게 주입되는지 보이는 데 필드주입은 잘 모르겠습니다... 답변주시면 정말 감사하겠습니다.
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
S
public String getResolution() {if (resolution == null || resolution.isEmpty()) {return "판매자에게 문의해주세요"; }return resolution;}----------------------------------------------public void setPrice(int price) {if (price < 100000) {this.price = 100000; } else {this.price = 100000; }}resolution 은 겟에 조건이 들어가있고 price 는 셋에 조건이 들어가있습니다 왜 한쪽은 겟에들어가있고 한쪽은 셋에 조건이 들어가있는건가요?
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
프로그램 실행할때마다
우측 상단의 Current File 이 자꾸 _01_ HelloWorld 파일로 바뀝니다.별거 아니지만, 반복되니 은근 거슬리네요. 해결방안이 있을까요?
-
미해결스프링 핵심 원리 - 기본편
프로토타입 빈 관련 질문있습니다.
@Test void singletonClientUsePrototype() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(PrototypeBean.class); PrototypeBean bean = ac.getBean(PrototypeBean.class); String[] beanDefinitionNames = ac.getBeanDefinitionNames(); for (String beanDefinitionName : beanDefinitionNames) { BeanDefinition beanDefinition = ac.getBeanDefinition(beanDefinitionName); if(beanDefinition.getRole() == BeanDefinition.ROLE_APPLICATION) System.out.println("beanDefinitionName = " + beanDefinitionName); } } @Scope("prototype") static class PrototypeBean { private int count = 0; public void addCount() { count++; } public int getCount() { return count; } @PostConstruct public void init() { System.out.println("PrototypeBean.init " + this); } @PreDestroy public void destroy() { System.out.println("PrototypeBean.destroy " +this); } } 프로토타입 빈을 ac.getBean 을 통해 요청하고 그 이후에 스프링 컨테이너를 조회했을때 프로토타입 빈이 존재하는지 확인해볼려고 위와 같이 코드를 작성하였습니다.그 결과로이와 같이 프로토타입 빈이 스프링 컨테이너에 있는걸 확인했습니다. 여기서 궁금한 점이 1. 스프링 컨테이너가 프로토타입 빈을 관리하지 않는 시점이란게 ac.getBean(PrototypBean.class) 을 실행한 바로 이후가 맞을까요? 2. ac.getBean(PrototypBean.class) 를 통해 빈을 반환하였고 그 뒤로는 스프링 컨테이너에서 해당 빈을 관리하지 않는다면 왜 프로토타입 빈이 여전히 스프링 컨테이너에서 조회가 되는지 궁금합니다. 제가 생각해본 바로는 ac.getBean(PrototypBean.class) 이후에는 스프링 컨테이너에 해당 프로토타입빈이 존재하지 않지만, 해당 프로토타입 빈의 beanDefintion은 여전히 존재하여 위와 같은 결과가 나왔다라고 생각이 들었는데 이게 맞을까요? 3. 해당 PrototypeBean 클래스에는 @PostConstruct 어노테이션을 통해 프로토타입 스프링빈이 의존관계 주입을 마칠떄 beanDefinitionName = ... 메세지가 뜨도록 설정하였습니다. 그런데 위 예제에서는AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(PrototypeBean.class);코드로 한번PrototypeBean bean = ac.getBean(PrototypeBean.class);코드로 두번 프로토타입 빈을 요청하였으므로 해당 메세지가 2번이 떠야하는게 아닌가요? 왜 한번만 발생하는지 궁금합니다. 이것도 제가 생각해본 바로는 스프링컨테이너를 생성하는 시점에 싱글톤타입과 다르게 프로토타입은 beanDefinition 만 생성이되고 스프링빈이 생성되지는 않기 때문에 위와 같은 결과가 나왔다라고 생각이 들었는데 이게 맞는 내용인지 궁금합니다.