본 게시물은 인프런의 백기선님 스프링 프레임워크 핵심기술 강의를 보고 간략하게 정리한 글입니다.
◎ 스프링 IoC 컨테이너와 빈
● IoC = Inversion of Control (의존관계 주입이라고도 부른다.)
- 의존 객체를 직접 만드는 건 아니고, 생성자를 사용해 주입받아 만들어서 쓰는 방법을 뜻한다.
왜 쓰는가? > 이게 다 노하우가 쌓여있는 프레임 워크라고...
- BeanFactory 객체를 통해서 빈 설정 소스로부터 빈의 정의를 읽어들이고, 구성하고, 제공한다. 그렇지만 실제 주로 사용하는 건 ApplicationContext라는 인터페이스이다. BeanFactory를 상속받고 있어서 같은 일을 할 수 있다.
● 빈Bean
: IoC 컨테이너에 들어있는 객체. 컨테이너를 컨테이너라고 부르는 이유도 빈을 담고 있어서다.
- @Autowired, @Service, @Repository 등의 어노테이션을 사용해서 Bean으로 등록한다. cf) 스프링 IoC와 관련이 없다면 빈이 아니다.
- 장점
1. 의존성 관리가 가능하다 (의존성 주입을 받기 위해서는 빈이 되어야 함.
2. 스코프 설정이 쉽다. (주로 싱글톤singleton을 사용한다.)
*싱글톤은 객체를 하나만 만들어서 사용하는 것, 프로토 타입은 매번 다른 객체를 만들어서 사용하는 것이다. 디폴트는 싱글톤이다.
3. 라이프사이클 인터페이스 사용이 가능하다
◎ ApplicationContext와 다양한 빈 설정 방법
● 직접 application.xml를 만들어서 id, class, scope등을 일일히 등록해주는 방법. property에 따라 참조해서 다른 bean의 id를 사용해야 한다. 이렇게 모든 설정을 일일히 해서 가져와 사용하면 되는데, 굉장히 번거롭다.
● xml말고 java에서는 @Configuration을 쓴 다음 일일히 @Bean을 등록해주면 된다. 이것도 번거롭다.
● 그래서 등장한게 component-scan이다. package안의 어노테이션을 스캔해서 설정하는 방식. @Service, @Repository등 Component에서 확장된 것들을 위에 써주면 빈으로 등록된다. 의존성으로 주입하려면 @Autowired를 써야한다.
● @ComponentScan(basePackageClasses = )을 사용해서 basePackageClasses에 스캔하고 싶은 클래스를 넣어주면 해당 클래스가 위치한 곳부터 component-scan을 실행해서 상단에서 말한 어노테이션이 들어있는 클래스들을 Bean으로 등록시켜준다. 지금 주로 사용하는 방식.
'CS > Spring' 카테고리의 다른 글
[스프링 부트 개념과 활용] 의존성 관리 (0) | 2020.08.15 |
---|