30%
61,600원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링 핵심 원리 - 기본편
Repository는 싱글톤 상태인가요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]AppConfig 리팩토링 강의에서 질문드립니다!DIP를 지켜주기 위해 AppConfig의 MemberRepository()를 inject하는 과정에서,memberRepository() 메소드가 MemoryMemberRepository() 객체를 생성해서 넘겨주게 되는데,이 경우에, OrderService로 넘어가는 memberRepository와 MemberService로 넘어가는 memberRepository 객체가 동일한 객체인가요??public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } private static MemoryMemberRepository memberRepository() { return new MemoryMemberRepository(); } public OrderService orderService() { return new OrderServiceImpl(memberRepository(), discountPolicy()); } 제가 생각한 바로는, MemberService, OrderService 각각에 들어가는 객체가 new로 들어가, 다른 repository를 참조하는 것 같아서요! 예시를 위해 이렇게 구현하신 건지.. 아니면 실제 repository가 싱글톤으로 돌아가는지 궁금합니다..!!싱글톤으로 돌아간다 하더라도, 어떻게 각각에 new를 해줬는데 싱글톤일 수 있는지도 궁금하네요..!! 감사합니다.
- 미해결스프링 핵심 원리 - 기본편
@Transactional 안에서 외부 서비스 api call 관련 질문있습니다.
@tranactional 이 붙은 메소드 안에서 외부 서비스 api를 call 해야하는 상황이 있는데컨트롤러 단에서 로직 분리가 힘든 상황입니다. @tranactional 이 붙은 메소드 안에서 아래와 같이 TransactionSynchronizationManager를 선언하고 override한 aftercommit 내부에서 호출하게 될 경우마찬가지로 외부 서비스 api에 장애가 발생했을 때도 본 서비스에 장애로 이어질 수 있을까요?? TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() { @Override public void afterCommit() { // 여기서 외부서비스 api 호출 } });
- 미해결스프링 핵심 원리 - 기본편
프록시와 스코프에 대해
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]1.CGLIB 라이브러리 관련 얘기를 싱글톤을 배울 때@Configuration 이 들어간수동 빈 등록 혹은자동 빈 등록@ComponantScan 에 자동으로 CGLIB이 적용 된다고 이해하면 되는걸까요 ?? 2.프록시를 보면서 가짜 프록시 객체를 생성하고 진짜객체를 조회 할 때까지 지연 처리 한다 적혀있는데CGLIB 이 적용된 @Bean 을 생각해 보면스프링 컨테이너에 myLoger 빈이 있으면 그대로 사용없으면 myLogger를 등록 후 리턴해서 싱글톤 보장이 된다고 이해를 했는데.request 스코프 빈은 요청이 와야 생성할 수 있으며Proxy,Provicder 가 지연 처리를 하며 ( localhsot~~~~ log-demo 들어갈때까지)CGLIB 기능(빈이 있으면 사용 없으면 새로 생성해서 리턴)myLogger@CGLIB(상속받은객체) 가 프록시 객체에 들어가며'가짜 프록시 객체는 실제 요청이 오면 그때 내부에서 실제 빈을 요청하는 위임 로직이 들어있다.'→ 가짜 프록시 객체 실행 시(myLogger.log 등..) @Componant 진짜 myLogger 빈을 사용해서기능 실행제가 이해한 Proxy,Provider 역할이 맞을까요 ? 3. @Scope는 싱글톤 스코프가 기본값으로 적용 되어있는데 여태까지 로직처리나 그런 부분은 따로@Scope를 설정 안했는데 DB연결 이나 네트워크 관련(페이지 이동? 로그인?) 일 때 주로 사용하는게 맞나요 @Scope에 대해서 어려움이 있어 질문 남깁니다..ㅠ
- 미해결스프링 핵심 원리 - 기본편
컨테이너 생성시 파라미터 전달하여 빈 등록하기
@Test void findAllBean() { ApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class,DiscountService.class); DiscountService discountService = ac.getBean(DiscountService.class); DiscountService.class 를 파라미터로 넘기면서 해당 클래스를 자동으로 스프링 빈으로 등록한다고 알고 있습니다 .static class DiscountService { private final Map<String, DiscountPolicy> policyMap; public DiscountService(Map<String, DiscountPolicy> policyMap) { this.policyMap = policyMap; DiscountService 클래스가 빈으로 등록되었으니 그럼 여기 DiscountService 생성자는 @Autowired 가 생략되어있다고 볼수 있는건가요? @Test void findAllBean() { ApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class); DiscountService discountService = ac.getBean(DiscountService.class);@Component static class DiscountService { private final Map<String, DiscountPolicy> policyMap; @Autowired // 생성자가 1개인 경우 생략 가능 public DiscountService(Map<String, DiscountPolicy> policyMap) { this.policyMap = policyMap; 위의 코드와 아래 코드는 동일하다고 볼 수 있나요?
- 해결됨스프링 핵심 원리 - 기본편
PrototypeBean 생성시점 질문입니다.
@Test void singletonClientUsePrototype() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(ClientBean.class, PrototypeBean.class); } static class ClientBean { private final PrototypeBean prototypeBean; @Autowired public ClientBean(PrototypeBean prototypeBean) { this.prototypeBean = prototypeBean; } }이 코드에서 new AnnotationConfigApplicationContext(ClientBean.class, PrototypeBean.class);이때 ClientBean은 싱글톤이어서 스프링 컨테이너에 생성되고 PrototypeBean은 프로토타입이라 생성되지 않습니다. (조회시점에 생성되므로 - getBean)static class ClientBean { private final PrototypeBean prototypeBean; @Autowired public ClientBean(PrototypeBean prototypeBean) { this.prototypeBean = prototypeBean; } }하지만 여기서 (의존관계 자동주입 시점)에 스프링컨테이너에 프로토타입빈을 요청하면 스프링컨테이너는 프로토타입빈을 생성해서 반환합니다.반환된 프로토타입빈을 ( 클라이언트 빈의 생성자를 통해) this.prototypeBean=prototypeBean; 에 의해서 내부필드에 주입되어서 보관합니다.라고 이해를 했는데 맞는지 궁금합니다.답변해주시면 정말 감사하겠습니다.
- 미해결스프링 핵심 원리 - 기본편
스프링 빈을 수동 등록하여 문제 해결
강의 4분 35초 즈음에 스프링 빈을 수동 등록하여 문제를 해결한다 함은,application.properties 파일에서 override true 설정 뒤spring.main.allow-bean-definition-overriding=true AutoAppConfig.class 파일에서@Configuration @ComponentScan( basePackages = "hello.basic.member", basePackageClasses = AutoAppConfig.class, excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class) ) public class AutoAppConfig { @Bean("discountPolicy") DiscountPolicy fixDiscountPolicy() { return new FixDiscountPolicy(); } }상기 코드와 같은 방법으로 진행한다는 말씀일까요..?
- 해결됨스프링 핵심 원리 - 기본편
1:18에서 되는 기능 저도 얼티메이트인데 왜 안 될까요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]1분 18초 부분을 봐주세요안녕하세요. 저도 학생용 라이센스로 얼티메이트(엔터프라이즈) 버전으로 인텔리제이 사용하고 있습니다. 그런데 " "부분에서는 절대 자동완성이 안 나오더라구요.그래서 혹시 영한님이 착각하시고 플러그인을 얼티메이트 버전이라고 하신 건지 여쭤보고 싶습니다.혹시 플러그인이라면 그 플러그인이 어떤 것인지 알려주시면 정말 감사드리겠습니다 💪🏻
- 미해결스프링 핵심 원리 - 기본편
싱글톤 스코프와 Test 시 .class 역할에 대해
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]1. 싱글톤을 사용시 자동으로 관리해주기 때문에@PostConstruct,@PreDestroy 를 사용안해도 되는게맞다면 빈 콜백생명주기 함수 때 따로 적용해서 DB클클라이언트, 네트워크 사용시 쓴다했는데싱글톤 스코프로 한다면 쓸 일이 없는걸까요 ??@PostConstruct,@PreDestroy 방법이 싱글톤 스코프를 사용 시 전부 자동으로 해결이 되는건지 ?? @PostConstruct,@PreDestroy 싱글톤 스코프를 사용시 따로 안써줘도 되는건지 ?네트워크나 db 연결 같은 시에만 사용을 하는건지 ... 헷갈려서 질문 남깁니다. 2.new AnnotationConfigApplicationContext() 에서괄호 안에 .class 적을 시 해당 클래스는 자동으로@ComponentScan 적용 대상이 된다고 하셨는데괄호 안에 .class 지정 시 @Component 사용을 안해도되고 .class 지정 시 해당 클래스에@Configuration,@ComponentScan 이 붙는다고 생각을 해도 되는 걸까요 ?
- 미해결스프링 핵심 원리 - 기본편
coreApplication 실행시 자동 종료
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.<CoreAppliction 실행 모습><build.gradle 모습>CoreApplication을 실행하면 강사님과 다르게 출력이 되고 스프링도 제가 종료하지 않아도 자동적으로 종료가 됩니다. build.gradle에 혹시 제가 잘못 추가한 부분이 있을까요??
- 미해결스프링 핵심 원리 - 기본편
@Autowired 필드 명만 빈 이름으로 변경
조회 대상 빈이 2개 이상일 때 해결 방법으로@Autowired 로면 필드 이름, 파라미터 이름으로 빈 이름을 추가 매칭한다 고 하셨는데파라미터로 매칭하는 경우 private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceimpl(MemberRepository memberRepository, DiscountPolicy fixDiscountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = fixDiscountPolicy; }이거는 이해가 갑니다. 근데 필드명으로 매칭하는 경우가 헷갈리는게 강사님께서 말씀하신 필드명으로 매칭하는 방법은 private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired private DiscountPolicy rateDiscountPolicy; @Autowired public OrderServiceimpl(MemberRepository memberRepository, DiscountPolicy fixDiscountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = fixDiscountPolicy; }이거는 rateDiscountPolicy가 그냥 사용되지 않아서 돌아 가는 거 아닌가요?rateDiscountPolicy를 사용해서 필드 명으로 매칭하려면 private final MemberRepository memberRepository; @Autowired private DiscountPolicy rateDiscountPolicy; public OrderServiceimpl(MemberRepository memberRepository, DiscountPolicy rateDiscountPolicy) { this.memberRepository = memberRepository; this.rateDiscountPolicy = rateDiscountPolicy; }이렇게 바꾸고 createOreder 메소드에 discountPolicy를 rateDiscountPolicy로 다바꿔야 돌아가던데 @Override public Order createOreder(Long memberId, String itemName, int itemPrice) { Member member = memberRepository.findById(memberId); // 기존 코드 // int discountPrice = discountPolicy.discount(member, itemPrice); // 바꾼코드 int discountPrice = rateDiscountPolicy.discount(member, itemPrice); return new Order(memberId, itemName, itemPrice, discountPrice); } 코드가 잘 작동되긴한데 이게 강사님이 말씀하신 방법이 맞는지 의문이 들더군요...ㅠㅠ답변 주시면 정말 감사하겠습니다.
- 해결됨스프링 핵심 원리 - 기본편
@Controller에서 @Component
@Controller 어노테이션엔 @Component가 있어 컴포넌트 스캔대상이 되고 스프링 빈에 등록되는 것으로 아는데컨트롤러 클래스가 스프링 빈 등록된다 해도 쓸데가 있나요? 언제 쓰이는건가요?
- 해결됨스프링 핵심 원리 - 기본편
프록시 객체는 싱글톤인가요?
다른 분들의 질문을 읽어보던중에, 같은 질문에 다른 답변이 달려있는게 있어서 여쭤봅니다."프록시 객체는 각 HTTP 요청마다 생성되는가?" 라는 질문에https://www.inflearn.com/questions/618437 는'각 요청마다 생성된다' 라고 답해져있고https://www.inflearn.com/questions/348888 는'프록시 객체는 한번만 생성된다'(맨밑에 있습니다) 라고 답해져있는데, 뭐가 맞는건가요?그리고, 강의 교안 <9.빈 스코프>의 마지막 페이지(32페이지)에 보면 '마치 싱글톤을 사용하는 것 같지만 다르게 동작하기 때문에 결국에 주의해서 사용해야한다.' 라는 말이 있는데요. 이 말에 대해서 좀 더 설명을 해주셨으면 좋겠습니다. 만약 프록시 객체가 한번만 생성된다면, 그게 싱글톤으로 등록된 것이나 마찬가지인데, 왜 "싱글톤을 사용하는 것 같지만 다르게 동작"하는지 잘 모르겠습니다.
- 미해결스프링 핵심 원리 - 기본편
Provider를 이용한 request scope 문제 해결 방법
강의 교안 <9.빈 스코프>의 28페이지를 보면 다음과 같이 설명되어있습니다."ObjectProvider.getObject()를 호출하는 시점까지 request scope 빈의 생성을 지연할 수 있다"이 때, 빈의 생성을 지연한다는 말이 실제로 getObject() 함수를 호출해야만 request scope의 MyLogger 빈이 만들어 진다는 건가요?아니면 http 요청이 들어오는 순간 이미 MyLogger 빈은 다른 로직에 의해 생성되어 존재함이 보장되고, getObject() 함수는 무조건 MyLogger 빈을 갖고 올 수 있기 때문에 이를 논리적으로 "빈의 생성을 지연한다"라고 표현하신 건가요?전자가 맞는지 후자가 맞는지 궁금합니다.*추가. 비슷한 질문이 있어서 해당 질문을 참고하여 내용을 추가하였습니다.https://www.inflearn.com/questions/702458위의 질문에서 "http요청이 들어왔을 때 request bean이 생성되는게 아니라, 생성할수있는 상태가 되는것이고, 이 상태일때 ObjectProvider.getObject()를 하게되면 request bean을 생성한후 반환하는것이다" 라는 답변이 있었습니다. 그래도 이해가 안되서, getObject() 함수가 호출되기 전에 getBean()으로 등록된 MyLogger 빈을 갖고와봤습니다. @Controller @RequiredArgsConstructor public class LogDemoController { private final ObjectProvider<MyLogger> myLoggerProvider; // 추가된 라인 private final ApplicationContext ac; @RequestMapping("log-demo") @ResponseBody public String logDemo(HttpServletRequest request) { // 추가된 라인 MyLogger testMyLogger = ac.getBean(MyLogger.class); // 추가된 라인 System.out.println(testMyLogger); String requestURL = request.getRequestURL().toString(); MyLogger myLogger = myLoggerProvider.getObject(); myLogger.setRequestURL(requestURL); myLogger.log("controller test"); LogDemoService.logic("testID"); return "OK"; } } ApplicationContext를 의존주입 받아서,getObject()가 호출되기 전에 getBean()으로 MyLogger 타입의 스프링 빈을 조회하고 출력하였는데,testMyLogger와 myLogger에 동일한 객체가 들어있었습니다.위의 답변과는 상충되는 결과인데, 제가 추가한 코드에 문제가 있는 건가요?
- 미해결스프링 핵심 원리 - 기본편
초기화라는 단어
빈 생명주기 콜백 강의를 듣고 질문 남깁니다.public NetworkClient(String url) { this.url = url; }이렇게 생성자에 url을 넘겨주어 값을 지정해주는 것이 초기화 작업이라고 생각하고 강의를 들었는데그러면 문맥상 맞지 않더라고요.가령스프링 빈은 객체 생성, 의존관계 주입이 끝나야 필요한 데이터를 사용할 수 있다.따라서 초기화 작업은 의존관계 주입이 모두 완료되고 호출되어야 한다.이런 부분에서 위 코드와 같은것이 초기화라고 생각한다면 그냥 객체 생성 단계에서 url 값이 지정되었기 때문에 그냥 사용 가능한거 아닌가요?강의에서 말하는 초기화 작업은 정확히 어떤걸 말씀하시는건가요?
- 미해결스프링 핵심 원리 - 기본편
setter 주입을 private으로 선언해도 의존 주입이 되는 이유
수정자 주입과 관련된 질문이 생겨서 글을 쓰게 되었습니다.강의에서 setter를 이용한 의존 주입을 할 때는, setter 함수를 public으로 열어놔야한다고 하셨습니다.만약에 private으로 막아놓으면 어떻게 될지 궁금해서 private으로 막아 놓고 테스트를 돌려보았는데, 여전히 올바르게 의존주입이 되는 결과가 나왔습니다.아무리 생각해봐도 스프링이 private으로 막혀있는 setter 함수를 호출할 수 없을 것 같은데, 어떻게 올바른 의존 주입이 되는 결과가 나온건지 궁금합니다.테스트에 사용한 코드는 아래와 같습니다.// OrderServiceImpl.java package hello.core.order; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import hello.core.discount.DiscountPolicy; import hello.core.discount.FixDiscountPolicy; import hello.core.discount.RateDiscountPolicy; import hello.core.member.Member; import hello.core.repository.MemberRepository; import hello.core.repository.MemoryMemberRepository; @Component public class OrderServiceImpl implements OrderService { private MemberRepository memberRepository; private DiscountPolicy discountPolicy; // ! setter 주입(setter 주입을 사용하려면 final 키워드를 사용할수 없음) @Autowired private void setMemberRepository(MemberRepository memberRepository) { this.memberRepository = memberRepository; } @Autowired private void setDiscountPolicy(DiscountPolicy discountPolicy) { this.discountPolicy = discountPolicy; } @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); } // 테스트 용도 public MemberRepository getMemberRepository() { return this.memberRepository; } } // AutoAppConfigTest.java package hello.core.scan; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import hello.core.AutoAppConfig; import hello.core.member.MemberService; import hello.core.order.OrderServiceImpl; import hello.core.repository.MemoryMemberRepository; public class AutoAppConfigTest { @Test void basicScan() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class); OrderServiceImpl orderServiceImpl = ac.getBean(OrderServiceImpl.class); System.out.println(orderServiceImpl.getMemberRepository()); } } // AutoAppConfig.java 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", basePackageClasses = AutoAppConfig.class, excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class)) public class AutoAppConfig { }
- 미해결스프링 핵심 원리 - 기본편
@Configuration과 @ComponentScan의 충돌
안녕하세요. @ComponentScan을 공부하다가 궁금한게 생겨서 질문드립니다.@ComponentScan에 의해서 @Configuration 이 붙은 클래스를 스캔했을 때, 이 때 만들어진 스프링 빈도 팩토리 빈의 역할을 하게 되나요?예를 들어,AppConfig 라는 클래스에 @Configuration을 붙이고 내부에 @Bean을 이용해 등록할 빈들을 만들어놓는다.AutoAppConfig 라는 클래스에 @ComponentScan을 붙이고 스프링 컨테이너(ApplicationContext)에 AutoAppConfig.class 로 설정정보를 넘겨준다.위와 같이 했을 때, AutoConfig가 스프링 빈으로 등록되고 @ComponentScan에 의해 스캔이 시작되어, AutoAppConfig가 위치한 패키지부터 하위 패키지까지 스캔되어 스프링 빈이 등록 될 것입니다. (AppConfig는 패키지 내부에 속해있어 스캔된다고 가정하겠습니다.)그럼 이 경우에 exclude 필터로 @Configuration에 해당하는 클래스를 제외하지 않는다면, AppConfig도 스프링 빈으로 등록될텐데,스프링 컨테이너(ApplicationContext)에 직접적으로 AppConfig.class와 같은 설정 정보를 전달하지 않았는데, 이때도 AppConfig가 팩토리 빈이 되어, 위의 1번에서 @Bean으로 만들어놓은 빈들을 스프링 컨테이너가 등록하게 되는지 궁금합니다.
- 해결됨스프링 핵심 원리 - 기본편
@RequiredArgsConstructor
@RequiredArgsConstructor 사용할 때, 추가 생성자를 작성하면, @RequiredArgsConstructor에 의해 자동으로 만들어진 생성자에는 @Autowired를 따로 추가해줘야하나요?
- 미해결스프링 핵심 원리 - 기본편
ObjectProvider를 Singleton으로 사용하지 않는가?
ObjectProvider 를 이용해 request scope 빈과 관련된 문제를 해결하는 과정에서 궁금한 것이 생겨 질문드립니다.교안에서 LogDemoController 와 LogDemoService 는 각각 필드로 ObjectProvider<MyLogger> 를 갖고 있는데요.실제로 애플리케이션을 동작시켜 출력해보니, LogDemoController 와 LogDemoService가 서로 다른 ObjectProvider 객체를 사용하고 있었습니다.ObjectProvider<MyLogger> 를 싱글톤으로 사용하지 않는 이유가 있을까요?
- 해결됨스프링 핵심 원리 - 기본편
싱글톤빈에 항상 새로운 프로토타입빈을 주입하는 방법
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요. 싱글톤빈에 항상 새로운 프로토타입빈을 주입하는 방법에 대해 생각해보았는데요. 혹시 이 방법은 사용하면 안되는걸까요??logic을 실행하기 전 new PrototypeBean이 생성돼서 항상 1이 반환됩니다.static class ClientBean { private PrototypeBean prototypeBean; public int logic() { this.prototypeBean = new PrototypeBean(); this.prototypeBean.addCount(); return this.prototypeBean.getCount(); } }
- 해결됨스프링 핵심 원리 - 기본편
스프링 컨테이너 라이프사이클 질문입니다.
10: 07초에 보시면스프링 컨테이너는 크게 두가지 라이프사이클 있다라고 말씀하셨는데1. 스프링 빈 등록 단계- 생성자에 @Autowired는 이때 자동적으로 의존관계 주입2. 의존관계 설정 단계 (Autowired가 걸린애를 자동으로 주입)- 수정자에(setter) @Autowired는 이때 자동적으로 의존관계 주입이렇게 이해를 했는데 맞는지 궁금합니다.답변주시면 정말 감사하겠습니다.