30%
61,600원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링 핵심 원리 - 기본편
@Bean 파라미터 있을 경우 빈 생성/등록 순서
@Configuration public class AppConfig { @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public OrderService orderService() { return new OrderServiceImpl( memberRepository(), discountPolicy()); } @Bean public MemberRepository memberRepository() { return new MemoryMemberRepository(); } ... }CGLIB이 AppConfig를 상속한 클래스를 만들어 참조할 빈이 등록되어 있으면 반환, 없으면 생성/등록하도록 조작한다고 이해했습니다. 위 방식과 다르게 @Configuration 클래스를 분리하겠습니다.@Configuration public class AppConfig { @Bean public MemberService memberService (MemoryMemberRepository memoryMemberRepository) { System.out.println("@@ AppConfig.memberService"); return new MemberServiceImpl(memoryMemberRepository); // return new MemberServiceImpl(getMemoryMemberRepository()); } } @Configuration public class TestConfig { @Bean public MemoryMemberRepository memoryMemberRepository() { System.out.println("@@ Testconfig.memoryMemberRepository"); return new MemoryMemberRepository(); } }테스트를 몇 번 해보니 memberService 빈 등록 시 memoryMemberRepository()가 알아서 먼저 호출된다는 걸 확인했습니다. 질문입니다.파라미터가 있을 경우 memoryMemberRepository 빈(파라미터)이 memberService 빈보다 먼저 생성/등록된다는 게 항상 보장되는 건가요?이런 방식에 위험이 있나요?
- 미해결스프링 핵심 원리 - 기본편
AppConfig에 질문이 있습니다.
@Configuration에 @Component가 있으면 메서드들은 자동으로 빈으로 등록되는 것으로 강의를 보면서 이해했습니다. 그러면 AppConfig에서 @Bean을 메서드마다 붙이지 않아도 @SpringbootApplication에 있는 @ComponentScan이 자동으로 component들을 빈으로 등록해줘서 의존관계 주입이 되는 거 아닌가요? 내가 잘못 이해하고 있는 거면 답변 부탁드립니다.
- 미해결스프링 핵심 원리 - 기본편
getBeanDefinitionNames()관련해서 질문이요
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요.컨테이너에 등록된 모든 빈을 조회할때Object bean=ac.getBean(beanDefinitionName);으로 bean을 찾았습니다.근데 밑 내용에서 스프링 컨테이너 에서 스프링 빈을 찾는 가장 기본적인 조회방법은 ac.getBean(빈이름,타입), ac.getBean(타입)으로 찾습니다.즉 매개변수를 하나로 찾으려면 ac.getBean(타입)으로 찾아야한다는 말과 같습니다.ac.getBean(beanDefinitionName)은 beanDefinitionName을 출력했을때 타입이 아니라 빈 이름인것 같은데 이게 어떻게 된걸까요?
- 미해결스프링 핵심 원리 - 기본편
제가 이해한게 맞을까요?
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요.제가 이해한게 맞는지 확인 좀 해주세요!스프링 빈의 이벤트 라이프 사이클은스프링 컨테이너 생성-> 스프링 빈 생성-> 의존관계 주입-> 초기화 콜백 ->사용 ...이렇게 되는데NetworkClient 예제에서는 초기화라는게 networkClient.setUrl("http ...") 이 아닌 connect() 와 call("초기화 연결 메세지") 이다즉 의존 관계 주입이후 connect와 call을 호출 하는 것이 목적이다.그렇기 때문에 @Beanpublic NetworkClient networkClient(){에서 return networkClient를 하기 전, networkCludent.setUrl(...)을 한 후에 networkClient.connect(), networkClient.call()을 한다면출력창에 찍히는 것은 같을지 몰라도 그 의미가 다르다. 왜냐하면 빈이 등록(return networkClient)이전에 호출한 함수이기 때문이다. 우리가 원하는 것은 의존관계 주입이후에 connect와 call을 하는 것이기 때문에 NetworkClient tmp=ac.getBean(NetworkClient.class);tmp.connect(); tmp.call();을 하는 것과 이론적으로 같다. 하지만 이렇게 하는게 귀찮으므로(?)1)인터페이스(InitializingBean)2)설정 정보에 초기화 메서드, 종료 메서드 지정, 3) @PostConstruct,@PreDestroy 애노테이션을 지원한다. 이게 맞나요??아 이거 뭔가 아닌것같은데 ㅠㅠ
- 미해결스프링 핵심 원리 - 기본편
NoUniqueBeanException 에러
https://www.inflearn.com/questions/776767/nouniquebeandefinitionexception-%EC%97%90%EB%9F%AC해당 글이랑 똑같은 에러, 상황인데 혹시 해결되셨나요? 답변이 없어서요 Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'hello.core.discount.DiscountPolicy' available: expected single matching bean but found 2: rateDiscountPolicy,getDiscountPolicy
- 미해결스프링 핵심 원리 - 기본편
ObjectProvider<MyLogger> myLoggerProvider 질문
안녕하세요 계속 고민하고 구글링하고 하다가 정리가 확실히 안되서 질문드립니다 ㅠ우선 https://www.inflearn.com/questions/743070/provider 여기에 나와있는 답변을 바탕으로 어느정도 정리가 되었습니다.하지만 여기서 드는 고민이 있습니다. 1. 그럼 LogDemoController,LogDemoService 는 @RequiredArgsConstructor 때문에 생성자에서 (두개의 클래스 안에 공통으로 있는) 필드ObjectProvider<MyLogger> myLoggerProvider를 주입받아야 되는데 ObjectProvider<MyLogger> myLoggerProvider는 .getObject()나오기 전까지 스프링컨테이너에 아무일도 안일어나는건가요?? 1번이 맞다면 대기하였다가 이 .getObject()이 실행될때 해당 빈(Mylogger)을 찾아서 반환을 해주고 그때서야 스프링컨테이너에 LogDemoController,LogDemoService 이 두개의 빈이 등록되는건가요???
- 해결됨스프링 핵심 원리 - 기본편
@Autowired 사용법 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]<컴포넌트 스캔과 의존관계 자동 주입 시작하기>강의에 질문 드립니다. 강의를 보면 RateDiscountPolicy에 @Component를, OrderServiceImpl에서 @Autowired를 이용하여 의존성을 주입해주고 있는데요. "스프링이 DiscountPolicy에 대해 아는 정보가 RateDiscountPolicy밖에 없기 때문에(@Component) @Autowired를 사용하여 의존관계를 주입하지 않아도 알아서 의존관계를 설정해주지 않을까?라는 궁금증이 생겨 아래 테스트를 작성해보았습니다. >> 위 설정으로 테스트를 작성하고 수행했을 때, 테스트가 통과되는 것을 확인했습니다.예상대로 아래 로그와 같이 스프링이 OrderServiceImpl과 RateDiscountPloicy의 의존관계를 설정해주고 있었습니다.>> 질문 1. 위 케이스대로면 생성자만 만들고, @Autowired설정 없이 의존관계를 주입하고 싶은 구현체만 @Component로 등록하면 되지 않을까요? >> 질문 2. @Autowried를 꼭 사용해야 하는 이유가 있을까요? 예를 들어 구현체 여러개가 빈으로 등록되어야 한다든지..(이 경우는 컴파일 에러가 나는 것 같은데 다른 설정법이 있는건가요?)
- 미해결스프링 핵심 원리 - 기본편
on-demand시 * 모든패키지 설정이 안되네용? 버전차이인가요?
[질문 내용]이전 강의부터 궁금했던 부분인데Assertions라던지 static 메소드 호출 후 Add On-demend static Import를 하게되면 강의에서는 import 문의 끝이 Assertions.*로 되는데저는 Assertions.assertThat으로 적용됩니다.혹시 자바 버전차이일까요? 아니면 따로 설정을 해줘야하는건가요?이렇게되면 assertThat만 바로 호출이가능하고 나머지 다른 메소드들은 Assertions 클래스를 다시 선언하고 접근해야 하더라구요그래서 따로 *로 지정하면 자동으로 assertThat으로 변경됩니다...혹시 왜그런것인지 해결방안을 알 수 있나요?
- 미해결스프링 핵심 원리 - 기본편
PrototypeBean 두번 생성되는 이유가 궁금합니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.강의 자료와 강의에서 하신 말씀을 보면 둘 다 PrototypeBean이 두 번 생성된다고 되어있습니다.그런데 강의 중에 이런 말씀을 하셨습니다."ClientBean은 싱글톤 타입이고 PrototypeBean은 ClientBean이 관리하니까 생성이 한번만 된다"이 말씀을 들을때는 저도 이해가 되고 동의가 되었는데 두번 생성된다는 말은 무슨말인지 모르겠습니다.
- 미해결스프링 핵심 원리 - 기본편
스프링 핵심원리 기본편 request 빈 스코프 만들기 문의
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요, 스프링 핵심원리 기본편 request 빈 스코프 만들기 예제 강의 11:52초 부분 강의 시청 중입니다.예제를 따라서 아래와 같이 코딩을 하였고, variable logDemoService not initialized in the default constructor 오류를 마주쳐서 해결 방법을 문의드립니다 ㅠㅠ소스 코드는 아래와 같습니다.package hello.core.web; import hello.core.common.MyLogger; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; @Controller @RequiredArgsConstructor public class LogDemoController { private final LogDemoService logDemoService; private final MyLogger myLogger; @ResponseBody @GetMapping("log-demo") public String logMemo(HttpServletRequest request) { String requestURL = request.getRequestURL().toString(); myLogger.setUuid(requestURL); myLogger.log("controller test"); logDemoService.logic("testId"); return "OK"; } }확인 부탁드리겠습니다 ㅠㅠ
- 미해결스프링 핵심 원리 - 기본편
이해안되는 곳이 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.의존관계 주입 방법에서 오더서비스 의존관계 주입을 하였습니다.그러고 난 다음 확인 하기 위해 오더서비스임플 생성자에 sout문장을 넣은거 같습니다.근데 오토앱컨피트테스트는 빈에서 멤버서비스를 가지고 오는것으로 보이는데 실행을 하니 오더 서비스에 생성자에 추가한 sout문장들이 출력이 되었습니다 저는 오더서비스의 생성자에 추가한 문장들이 나오지 않습니다. 원래 멤버서비스 객체를 받아온거 아닌가요? 왜 오더서비스 sout문장이 나오는지 잘 모르겠습니다 ㅜ
- 미해결스프링 핵심 원리 - 기본편
@Autowired 오류입니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]먼저, 항상 좋은 강의 감사드립니다!@Autowired에서 빨간줄이 뜨고Autowired members must be defined in valid Spring bean (@Component|@Service|...) 라는 문구가 뜨게됩니다 어떻게 해결해야 하나요?
- 해결됨스프링 핵심 원리 - 기본편
@Configutation 질문
ApplicationContext로 class를 등록하고 등록된 빈들을 조회해보니 싱글톤이 보장되는 것을 확인했습니다.근데 @Configuration을 사용하지 않고 @Bean만 사용하면 주입받는 객체들이 싱글톤을 유지하지 않게되는데@Configuration이 주입관계있는 빈들까지 싱글톤을 보장해주는 것 맞나요..?
- 미해결스프링 핵심 원리 - 기본편
안녕하세요.
안녕하세요 강의 너무 잘듣고 있습니다 항상감사합니다. build.gradle로 프로젝트를 open하는거랑 그냥 프로젝트 폴더로 open하는거 차이를 알고싶습니다.강의를 계속반복하고있는데 최근 스프링부트 버전이 3.xx되면서 3.xx부터는 자바17만지원되는데 17을사용해도 문제없는지 궁금합니다...
- 미해결스프링 핵심 원리 - 기본편
조회대상 빈이 2개 이상 일 때 빈지정에 방법들의 DIP 위반 여부
관련 강의 : 의존관계 자동 주입 - 6번째 강의(@Autowired, @Qualifer, @Primary)질문타입이 같은 빈이 여러 개 조회 될 때, 특정 빈을 선택하는 방법을 3가지 소개해 주셨는데..이 3가지 방법이 결국 특정 빈을 지정해 주는 방법인 것 같습니다. 이 방법을 사용하면, 특정 빈을 지정해 DI 할 수 있을 것 같습니다. 그러나 DIP 위반을 피하기 위해서 이전 강의에서 AppConfig에서만 특정 빈을 선택하도록 하였습니다. 예를들어 AppConfig에서 DiscountPolicy 중 Rate..와 Fix... 를 선택하게 하고 , 또한 AppConfig에서 MemberRepository 중 Memory..., DB...,External... 등을 선택하도록 하여 DIP 위반 문제를 해결했습니다. 그런데 @Qualifer,@Primary 등을 사용하면 OrderServiceImpl 이나 MemberServiceImpl 이 RateDiscountPolicy, FixDiscountPolicy 또는 Repository 관련 하위 클래스 등을 선택하게 되어 결국은 DIP에 위반되는 것은 아닌지 여쭈어 봅니다. 감사합니다.
- 미해결스프링 핵심 원리 - 기본편
생성자 주입으로 변경했을 때 Provider 생성할때 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.단위 테스트로 할 때 필드 주입이 좋지 않다고 하셔서 생성자 주입으로 변경 후 돌려봤을 때 Provider를 적용하기 전에 ObjectProvider<PrototypeBean> 으로 했을 때는 테스트가 성공했지만 Provider로 할때는 다음과 같은 에러가 나서 왜 발생했는지 질문드립니다org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'singletonWithPrototype.ClientBean': Unsatisfied dependency expressed through constructor parameter 1: No qualifying bean of type 'javax.inject.Provider<hello.core.scope.SingletonWithPrototype$PrototypeBean>' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}아래는 전체 코드 입니다.package hello.core.scope; import jakarta.annotation.PostConstruct; import jakarta.annotation.PreDestroy; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.ObjectProvider; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Scope; import javax.inject.Provider; import static org.assertj.core.api.Assertions.assertThat; public class SingletonWithPrototype { @Test void prototypeFind() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(PrototypeBean.class); PrototypeBean prototypeBean1 = ac.getBean(PrototypeBean.class); prototypeBean1.addCount(); assertThat(prototypeBean1.getCount()).isEqualTo(1); PrototypeBean prototypeBean2 = ac.getBean(PrototypeBean.class); prototypeBean2.addCount(); assertThat(prototypeBean2.getCount()).isEqualTo(1); } @Test void singletonClientUsePrototype() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(ClientBean.class, PrototypeBean.class); ClientBean clientBean1 = ac.getBean(ClientBean.class); int count1 = clientBean1.logic(); assertThat(count1).isEqualTo(1); ClientBean clientBean2 = ac.getBean(ClientBean.class); int count2 = clientBean2.logic(); assertThat(count2).isEqualTo(1); } @Scope("singleton") static class ClientBean { private final PrototypeBean prototypeBean; //생성시점에 주입되어서 계속 같은 거 사용. private final Provider<PrototypeBean> prototypeBeanProvider; @Autowired //생성자 하나니까 @Autowired 생략해도 되긴 함 public ClientBean(PrototypeBean prototypeBean, Provider<PrototypeBean> prototypeBeanProvider) { this.prototypeBean = prototypeBean; this.prototypeBeanProvider = prototypeBeanProvider; } public int logic() { PrototypeBean prototypeBean = prototypeBeanProvider.get(); prototypeBean.addCount(); return prototypeBean.getCount(); } } @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"); } } }
- 미해결스프링 핵심 원리 - 기본편
생성자에서 @Autowired 생략
setter에 @Autowired를 붙이고, 생성자에 @Autowired를 붙이지 않은 경우에도생성자에는 @Autowired가 붙은 것과 같이 동작하나요?
- 미해결스프링 핵심 원리 - 기본편
싱글톤방식 주의점 관련 질문있습니다
싱글톤방식을 할 때 항상 싱글톤 객체는 무상태로 설계해야 한다고 강의자료에 나와있는데 그러면 항상 빈을 설계할때 스프링빈의 필드에는 공유값을 설정하지 말고 무조건 지역변수와 같은 것들로 설계를 해야하나요?? 예외는 없는건가요??
- 미해결스프링 핵심 원리 - 기본편
@Autowired 필드 명에서
[질문 내용]안녕하세요, 강의를 듣다 궁금한 점이 생겨 질문 드립니다.@Autowired 필드 명에서, 먼저 타입 매칭을 시도하고, 그 결과에 여러 빈이 있을 경우 필드 명, 파라미터 명으로 빈 이름을 매칭한다고 이해했습니다.그렇게 된다면, 기존 코드인 (DiscountPolicy discountPolicy)@Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { ..... }이처럼은 사용 못하는 것이고@Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy ratecountPolicy) { ..... }DiscountPolicy rateDiscountPolicy 처럼 파라미터명( 또는 필드명)을 바꿔줘야 하는건가요?감사합니다!
- 미해결스프링 핵심 원리 - 기본편
동작 가능한 프로젝트 파일은 없을까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요.각각의 강의에서 완성된 인텔리제이용 프로젝트 파일을 받을수 있나요?있으면 도움이 많이 도움이 될 것 같습니다.단순히 이해만 하고 넘어가도 되는 강의나 강의내용을 따라했지만 동작이 되지 않는 경우 바로 참조가 가능하기 때문에 그렇습니다.