분류 전체보기176 (스프링 핵심 원리 - 기본편) 6-(1)@컴포넌트 스캔과 의존관계 자동 주입 시작하기 - 컴포넌트 스캔과 의존관계 자동주입 시작하기 스프링 빈을 등록할 때 지금까지는 자바 코드의 @Bean이나 XML의 을 통해 직접 등록할 스프링 빈을 나열하는 방식 사용함. 하지만 이렇게 등록해야 할 스프링 빈이 수십, 수백개가 된다면 귀찮을 뿐만 아니라 누락 문제도 발생 그래서 스프링에서는 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔 기능 제공함 컴포넌트 스캔 사용법 : @ComponentScan 붙이기 @Configuration도 컴포넌트 스캔의 대상이 된 이유도 @Configuration의 소스코드를 열어보면 @Component 애노테이션이 붙어있기 때문 이전에 Config 사용했을 때는 @Bean으로 직접 설정 정보 작성, 의존관계도 직접 명시 Component를 이용하면 이런.. 2023. 4. 4. (스프링 핵심 원리 - 기본편) 5-(5)@Configuration과 싱글톤 (6)@Configuration과 바이트코드 조작의 마법 - @Configuration과 싱글톤 @Bean memberService 를 호출하면 memberRepository() 를 호출하면서, new MemoryMemberRepository() 호출 @Bean orderService()를 호출하면 memberRepository()와 discountPolicy()를 호출하면서, new new MemoryMemberRepository() 와 new RateDiscountPolicy() 호출 위 과정을 살펴보면 마치 싱글톤이 깨지는 것처럼 보임. 스프링 컨테이너는 이를 어떻게 해결할까? 실험을 해보자 ! 테스트용으로 MemberServiceImpl과 에 getMemberRepository() 메서드 생성 위 테스트 결과 세 객체가 모두 같은 객체임을 확인할 수 있.. 2023. 4. 4. (스프링 핵심 원리 - 기본편) 5-(1)웹 어플리케이션과 싱글톤 ,(2) 싱글톤 패턴, (3) 싱글톤 컨테이너 (4) 싱글톤 방식의 주의점 - 웹 어플리케이션과 싱글톤 대부분의 스프링 애플리케이션은 웹 어플리케이션. ( 웹 아닌 것도 개발 가능) 웹 어플리케이션은 여러 고객이 동시에 요청 우리가 만든 memberService를 모든 고객마다 new로 객체 생성 계속 요청이 올 때마다 객체를 매번 만들어야 하는 것. 메모리 낭비 심함. => 해결책 : 싱글톤패턴 - 싱글톤 패턴 클래스의 인스턴스가 딱 1개만 생성되도록 하는 디자인 패턴 객체 인스턴스를 2개 이상 생성하지 못하도록 해야 함. private생성자를 사용해서 외부에서 임의로 new 키워드를 사용하지 못하도록 막아야 함. 싱글턴패턴 설정 방법 static 영역에 instance 미리 하나 생성해서 올려두기 이 객체가 필요하면 오직 getInstance() 메서드를 통해서만 조회 가능.. 2023. 4. 3. (스프링 핵심 원리 - 기본편)스프링 빈 조회- 4-(7)다양한 설정형식 지원 - 자바코드, XML, (8)스프링 빈설정 메타 정보 - BeanDefinition - 다양한 설정형식 지원 - 자바코드, XML 스프링 컨테이너는 자바코드, XML, Groovy 등등 다양한 형식의 설정정보 받아드릴 수 있음 XML 설정 사용 최근에는 많이 사용 X 하지만 아직 많은 레거시 프로젝트들이 XML로 되어있으며 XML을 사용하면 컴파일 없이 설정 정보 변경 가능한 장점도 있음 GenericXmlApplicationContext 사용 - 스프링 빈설정 메타 정보 - BeanDefinition 스프링이 다양한 설정 형식을 지원하는 것은 역할과 구현을 개념적으로 나누어 추상화를 했기 때문에 가능한 것. XML을 읽어서 BeanDefinition, 자바코드를 읽어서 BeanDefinition만 만들면 되기 때문 BeanDefinition : 빈 설정 메타정보 이 메타정보를 기반으로.. 2023. 4. 3. (스프링 핵심 원리 - 기본편)스프링 빈 조회- 4-(4)동일한 타입이 둘 이상, (5)상속관계, (6) BeanFactory와 ApplicationContext - 스프링 빈 조회- 동일한 타입이 둘 이상 타입으로 조회 시 같은 타입의 스프링 빈이 둘 이상이면 오류가 발생하므로 이 때는 빈 이름을 지정해줘야 함 같은 타입이 둘 이상 있을 때, getBean()을 하면 위와 같은 오류가 발생 - 상속관계 빈을 조회할 때, 상속관계로 되어있다면 ? 부모 타입으로 조회하면 자식 타입도 함께 조회됨 자바 모든 객체의 최고 부모인 Object타입으로 조회하면 모든 스프링 빈을 조회하게 됨. package hello.core.beanfind; import hello.core.AppConfig; import hello.core.discount.DiscountPolicy; import hello.core.discount.FixDiscountPolicy; import hello.. 2023. 4. 2. (스프링 핵심 원리 - 기본편) 4-(1)스프링 컨테이너 생성, (2)컨테이너에 등록된 모든 빈 조회, (3) 스프링 빈 조회-기본 - 스프링 컨테이너 생성 ApplicationContext를 스프링 컨테이너라 함 ApplicationContext는 인터페이스 => 다형성 적용 가능 //스프링 컨테이너 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext를 구현한 것 중의 하나가 AnnotationConfigApplicationContext임. 스프링컨테이너는 XML기반으로도, 에노테이션 기반의 자바 설정 클래스로도 만들 수 있음( 요즘엔 에노테이션 위주) 스프링 컨테이너를 부를 때, 'BeanFactory', 'ApplicationContext'로 구분해서 말함. 다만, 'Bean.. 2023. 4. 1. 이전 1 ··· 12 13 14 15 16 17 18 ··· 30 다음