본문 바로가기

스프링기본편25

(스프링 핵심 원리 - 기본편) 7-(1) 다양한 의존관계 주입 방법 - 다양한 의존관계 주입 방법 스프링은 스프링 빈을 등록하는 단계와 의존관계 주입하는 단계로 나뉨. 생성자 주입 생성자를 통해 의존관계 주입 지금까지 해오던 것. 특징 생성자 호출 시점에 딱 1번만 호출 되는 것이 보장됨 불변, 필수 의존관계에 사용 생성자가 딱 1개만 있으면 @Autowired 생략해도 자동 주입(스프링 빈에만 해당) 수정자 주입(setter 주입) setter라 불리는 필드의 값을 변경하는 수정자 메서드를 통해 의존관계 주입 특징 선택, 변경 가능성이 있는 의존 관계에 사용 자바빈 프로퍼티 규약의 수정자 메서드 방식을 사용 만약 수정자 내의 주입하려는 객체가 자바빈에 등록이 안되어있어도 사용 가능 @Autowired 는 기본적으로 주입할 대상이 없으면 오류 발생. 이를 주입할 대상이 .. 2023. 4. 6.
(스프링 핵심 원리 - 기본편) 6-(2)탐색 위치와 기본 스캔 대상, (3)필터 ,(4) 중복 등록과 충돌 - 탐색 위치와 기본 스캔 대상 모든 자바 클래스를 다 컴포넌트 스캔하면 오래걸리므로 시작위치를 지정하는 방법 사용 backPackages : 탐색할 패키지의 시작위치 지정해서 그 패키지와 하위 패키지까지 모두 탐색. basePackageClasses : 지정한 클래스의 패키지를 탐색 시작 위로 지정 지정하지 않으면 @ComponentScan이 붙은 설정 정보 클래스의 패키지가 시작 위치로 지정 권장 방법 패키지를 지정하지 않고 설정 정보 클래스의 위치를 프로젝트 최상단에 두는 방법 스프링 부트도 이 방법을 제공 컴포넌트 스캔 기본 대상(괄호 : 컴포넌트 스캔 외의 기능) @Component 뿐만 아니라 아래 목록도 대상에 포함 @Controller : 스프링 MVC컨트롤러에서 사용(스프링 mvc 컨트롤.. 2023. 4. 6.
(스프링 핵심 원리 - 기본편) 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.