묻고 답해요
129만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결
스프링 빈 등록
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"); assertThat(discountService).isInstanceOf(DiscountService.class); assertThat(discountPrice).isEqualTo(1000); } static class DiscountService { private final Map<String, DiscountPolicy> policyMap; private final List<DiscountPolicy> policies; 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); System.out.println("discountCode = " + discountCode); System.out.println("discountPolicy = " + discountPolicy); return discountPolicy.discount(member, price); } } } 이것들을 스프링빈으로 등록하면, 정확히 어떤 것들이 스프링 빈으로 등록되는건가요? 모든 필드, 메소드들이 다 등록되는건가요?
-
미해결스프링 핵심 원리 - 기본편
CoreApplication 실행시 오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예강의초반의 설명에 따라 hello.core.CoreApplicaton을 실행하니MemberServiceImpl에서 생성자가 1개의 bean을 필요로 하는데 두개의 bean이 찾아졌다고 합니다. Description에따라 MemberServiceImpl, MemoryMemberRepository, AppConfig를 확인해보았지만강의와 다른 점을 찾지 못해 해결하지 못하였습니다. Action에 적힌 것처럼 @Primary를 붙이거나 @Qualifier을 붙여서 해결해야 하는 건가요?MemberServiceImplAppConfigMemoryMemberRepositoryAutoAppConfig
-
미해결실전! Querydsl
Projections.fields()와 Projections.bean() 질문입니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]>> 로컬 환경스프링부트 3.1.2hibernate-core 6.2.6안녕하세요!Projections.bean()은 setter를 이용해서 인스턴스를 만든다고 하셨는데, getter/setter를 전부 제거해도 테스트를 통과하고 인스턴스도 잘 초기화가 되어버렸습니다.좀 이상하기도 하고 bean()와 fields()가 동작 방식이 거의 같은 것 같아 확인해보니 new QBean<T>를 할 떄 fields()에는 fieldAccess 파라미터에 true를 인수로 넣는 차이밖에 없더라고요.public static <T> QBean<T> fields(Class<? extends T> type, Expression<?>... exprs) { return new QBean<T>(type, true, exprs); }라이브러리 코드를 보면fieldAccess가 true면 this.fields에 값을 바인딩하고 this.setters는 emptyList로 초기화하고 fieldAccess가 false일 경우 this.fields를 emptyList로 초기화하고 this.setters에 값을 바인딩하는데요.if (fieldAccess) { this.fields = initFields(bindings); this.setters = Collections.emptyList(); } else { this.fields = Collections.emptyList(); this.setters = initMethods(bindings); }실무에서 활용할 때 이 두 함수 관련해서 주의점이 있을까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
스프링빈과 의존관계에서 방법의 차이가 무엇인가요
스프링 빈과 의존관계에서, (1)컴포넌트 스캔과 자동 의존관계 설정 / (2) 자바 코드로 직접 spring 빈 등록하기총 2가지 방법으로 설명해주셨고 2가지 방법 모두 알아야한다고 말씀해주셨는데, 두 방법이 사용되는 상황이 다른가요?? 각 방법이 어떤 차이가 있고 장단점이 있다면 궁금합니다!
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
코드로 직접 빈을 생성하는 부분에서 질문이 있습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용] 먼저 좋은 강의 정말 감사하게 듣고 있습니다. @Configuration 어노테이션을 붙인 클래스에서 코드로 직접 빈을 생성하는 부분에 대한 질문입니다. @Bean public MemberService memberService() { return new MemberService(memberRepository()); } @Bean public MemberRepository memberRepository() { return new MemoryMemberRepository(); } 이 부분에서 MemberService 객체와 MemberRepository 객체를 생성하면서 Bean으로 등록하는 것으로 보입니다. 그럼 memberService Bean은 memberRepository()를 호출하면서 Service 객체에 종속되는 MemberRepository 객체를 가지게 되고, MemberRepository Bean은 또 새로운 객체를 가지게 되어서, 결국 MemberRepository 객체가 두 개가 되는 게 아닌가요? (Service의 멤버로 하나, Repository Bean 하나) 강의 영상을 보니까 제 생각이 틀린 것 같은데, 이 부분에 대해 어떻게 작동하는 건지 이해가 잘 안 됩니다. 감사합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Bean 등록해서 개발시 Around 컨디션, 그리고 Around(AOP) plugin
1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요! 너무 좋은 강의 완강 하면서 정말 재밌습니다. 다음 강의들도 정말 기대됩니다 :) 두가지 질문이 있어서 여쭤봅니다. 1. Around의 Parmeter AOP를 이용할 때, Bean 등록을 해서 이용했을때, 에러가 나서 질문 목록을 찾아보니, 다른 질문자분께서 이미 Around의 컨디션을 코딩해두셨더라고요 (조성백님의 AOP SpringConfig @Bean으로 등록시 에러) 그 글을 참고하고, Around에 Parameter(?)를 업데이트 해준 후에, 에러 없이 동작시킬 수 있었습니다. @Around("execution(* hello.hellospring..*(..)) && !target(hello.hellospring.SpringConfig)") public Object execute(ProceedingJoinPoint joinPoint) throws Throwable { ... } hello.spring 패키지에 모두 적용되고 까지는 이해 되었는데 !target.... 이 부분이 어떻게 연관이 되었는지 궁금합니다. 또 이렇게 Around를 이 형식으로 해주어야만 빈등록을 해서 사용할 수 있는것인가요? 왜 Component 를 사용해서 Run 했을때와는 다른지 궁금합니다. 2. 두번째 질문은, 제 IntelliJ에서는 영한님처럼 Around안쪽 String이 하이라이트 되지 않고 syntax가 인식되지 않는것처럼 나오는데요(Around 안쪽 스트링이 모두 한 스트링으로, intelliJ default 초록색으로 보여집니다), 혹시 어떤 Plugin을 써야하거나 세팅을 다르게 해주어야하나요? 다시한번 좋은 강의 감사드립니다!
-
미해결스프링 핵심 원리 - 기본편
.class 의 의미
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요. getBean() 인수에서 타입을 작성할 때 예를들어 MemberRepository . class 라고 넘기는데 여기서 .class 라고 쓰는 이유가 있나요 파라미터에서 .class가 무슨역할인지 모르겠습니다 항상 답변해주셔서 감사합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
안녕하세요! 질문이 있습니다.
안녕하세요! 항상 좋은 강의 감사드립니다 :D 강의를 보면서 궁금한 점이 생겨 질문 드립니다. Spring bean 같은 경우에는 @Configuration 대상 클래스에 대한 프록시 객체를 생성하여 싱글톤을 보장하여 Spring container에서 관리된다는 것으로 배웠는데요. Servlet은 어떤식으로 Servlet Container내에서 싱글톤을 보장하는 것인가요??
-
미해결스프링 핵심 원리 - 기본편
안녕하세요! 질문이 있습니다.
안녕하세요! 영한님, 좋은 강의 감사드립니다 :) 강의를 수강하다가 궁금한 점이 생겨 질문드립니다. 스프링 빈이 스프링 컨테이너에 로딩되는 시점에 대한 궁금증인데요. 컴파일된 바이트 코드가 Class loader에 의해 JVM 내로 로딩되는 시점에 Spring container가 먼저 생성되고, @Bean이나 @Component 등의 어노테이션이 붙은 메서드나 클래스를 찾아서 객체(bean)를 생성한 이후에 Spring container 내에 등록 시키고, 의존관계를 주입해주는 등의 일련의 과정으로 동작하는 것이 맞을까요?
-
미해결스프링 핵심 원리 - 기본편
빈 생성과 의존관계 주입시점에 대하여
헷갈리는 부분이 있어서 과정을 제대로 이해한게 맞는지 궁금합니다! A빈을 먼저 접근하고, A가 B를, B가 C를 의존한다는 가정입니다. 생성자 주입은 객체를 생성하면서 자연스럽게 생성자를 부르니까 1.A빈을 등록하기 전, 생성자의 파라미터에 있는 인자 B가 빈으로 등록됐는지 확인 2.B가 빈 등록이 되어있으면 의존관계 주입, 안되어 있으면 그 B를 찾아감 3.B빈을 등록하기 전, 생성자의 파라미터에 있는 인자 C가 빈으로 등록됐는지 확인 4.C가 빈 등록이 되어있으면 의존관계 주입, 안되면 C로 찾아감 5.C빈은 주입할 의존관계가 없음으로 C빈 등록 6.B빈 등록, C의존관계 주입 7.A빈 등록, B의존관계 주입 이렇게 이해를 했고 수정자 주입이나 필드 주입의 경우 1.A빈을 B빈이 없어도 우선 등록 2.B빈을 C빈이 없어도 우선 등록 3.C빈을 등록 4.각각의 의존관계를 쭉 주입 이렇게 이해를 했는데 맞을까요 ..? 각각의 매커니즘을 제대로 이해한 게 맞는지 의문이 들어 질문드립니다!