게시글
질문&답변
2021.03.30
AppConfig가 왜 실행되는지 궁금합니다.
제가 곰곰이 생각해보니... @SpringBootApplication 설정에서 filter를 설정하지 않았기 때문에 AppConfig.class가 실행되는것이 맞는것 같습니다. 그렇다면 @SpringBootApplication 설정에서 실행한다면, AppConfig.class에서 수동으로 선언된 @Bean들이 Bean객체로 만들어짐. --> 수동 @Component로 선언되어진 클래스가 Bean객체로 만들어 짐. --> 자동 정리하자면 1. 수동으로 Bean객체생성 2. 자동으로 Bean객체 생성 그렇다면 수동 Bean객체가 우선순위를 가지므로 현재 Spring Container가 가지고 있는 Bean객체들은 1번의 객체들이 들어가게 된다고 이해하는게 맞나요? 질문하면서 정리가 된 느낌이라... 제가 제대로 이해한건지 궁금하여 문의 드립니다. 감사합니다.
- 3
- 3
- 361
질문&답변
2021.03.30
@Component 사용시 implement 된 구체화 클래스가 두 개일 경우
안녕하세요 선생님 질문이 있어 문의드립니다.해당 영상의 7:16쯤 화면에 call AppConfig.memberRepositorycall AppConfig.memberServicecall AppConfig.orderService이 세라인이 찍히는 것을 볼 수 있습니다. 이 로그(?)는 AppConfig에서 실행시킨 내용입니다. 여기서 궁금한 점은, @Configuration@ComponentScan(// basePackages = "hello.core.member", excludeFilters = @ComponentScan.Filter (type = FilterType.ANNOTATION, classes = Configuration.class))public class AutoAppConfig {// @Bean(name = "memoryMemberRepository")// MemberRepository memberRepository(){// return new MemoryMemberRepository();// }} 위와 같이 exclude옵션으로 AppConfig.class에 기재된 @Bean들을 Bean객체로 만들지 않는것으로 인지하고 있었습니다. 제 생각에는 실행되지 않아야 할거 같은데 아래 코드와 같이 @Bean생성 함수들이 실행되는거 같아 문의 드립니다. @Configurationpublic class AppConfig { @Bean public MemberService memberService() { System.out.println("call AppConfig.memberService"); return new MemberServiceImpl(memberRepository()); } @Bean public MemoryMemberRepository memberRepository() { System.out.println("call AppConfig.memberRepository"); return new MemoryMemberRepository(); } @Bean public OrderService orderService(){ System.out.println("call AppConfig.orderService"); return new OrderServiceImpl(memberRepository(), discountPolicy()); } @Bean public DiscountPolicy discountPolicy(){// return new FixDiscountPolicy(); return new RateDiscountPolicy(); }} 마지막으로, 항상 좋은 강의 진행해 주셔서 정말 감사합니다. 요즘 정말 선생님 덕분에 개발에 흥미를 느끼고 삶이 즐거워 지고 있습니다. 정말 감사합니다.
- 9
- 3
- 438