1) 스프링 IoC 컨테이너와 빈
Inversion of Control : 의존 관계 주입이라고 하며 어떤 객체가 사용하는 의존적인 객체를 직접 만들어서 사용하는 것이 아닌 주입을 받아 사용하는 방법을 말합니다.
- BeanFactory
- 애플리케이션 컴포넌트의 중앙 저장소 역할. + 빈 이스턴스 생성, 의존 관계 설정, 빈 제공
- 빈 설정 소스로 부터 빈 정의 읽어 들이며 빈을 구성하고 제공.
* 스프링 IoC로 부터 받아서 사용하게 되면 해당 인스턴스는 항상 같은 객체를 제공하므로 메모리 측면에 효율적이며 Runtime 시 성능면에서 효과가 좋다.
+Sigleton VS Prototype -> 하나의 객체 VS 매번 다른 객체
Bean : 스프링 IoC 컨테이너가 관리하는 객체
다양한 빈 설정 방법.
초기에는 resources 부분에 xml 을 작성하는 방식으로 시작하여 일일히 bean 을 등록해야 했다.
--> application.xml
<bean id="객체 아이디" class=패키지 경로.해당 객체">
의존관계 주입 받기 위해 property 설정.
<property name="bookRepository" ref="bookRepository"></property>
<!-- name 은 setter메소드 명. ref 는 Id는 해당 주입 받을 객체의 id. -->
</bean>
일일히 추가하기 불편해서 전체적으로 Bean으로 등록 (에노테이션 기법 사용 Component | Service | Repository |Autowired 표기하면서 해당 패키지를 한번에 Scan할 수 있도록 하였다.
<context:component-scan base-package="com.kbytech">
<!-- Bean으로 등록 해야 한다 @Service @Repositoty @Componenet -->
</context:component-scan>
이 마저도 불편하여 따로 xml 을관리하는 것보다는 자바 설정파일을 사용하여 관리하기로 한다. 현대 방식와 비슷해져 가고 있는 것을 알 수 있습니다.
<SpringApplication Context 부분>
ApplicationConfig 빈들이 있는 곳에 java파일을 만들고
@Configuaration 을 표기하고
해당 객체들을 @Bean 으로 등록하도록 하다. (해당 bookService 객체는 setter로 의존성(Repository객체)을 주입받아 사용하였습니다.)
bookservice 를 좀 더 간단히 작성하기 위한 다면 해당 객체들을 빈으로 등록하고 bookService 객체에
@Autowired까지 표기해 주시면 됩니다.
ex)
@Bean
public BookRepository bookRepository() {
return new BookRepository();
}
@Bean
// 메소드 파라미터로 주입 가능 (여기) -> BookRepositooty
public BookService bookService() {
/* BookService bookService=new BookService();
//의존성 주입 setter 만든 거로 부터.
bookService().setBookRepository(bookRepository());
return bookService();*/
return new BookService(); // @Autowired 붙이기 setter 라서 가능!
// 생성자는 @Autowired가 안됨. }
}
자바의 설정파일에 대한 것이라 용이하지만 해당 빈들을 일일히 쓰기에는 코드가 길어질 수 있다 그러므로
ComponentScan을 사용한다. 해당 빈들을 등록 (Service,Repository,Component ... 으로 등록)
하지만 현대 스프링 부트는 @SpringBootApplication 어노테이션 기법을 이용하여 사용할 수 있다.이 안에는 이미 ComponentScan,Configuration 이 들어가 있습니다.
'Spring > Spring_CoreTechnologies' 카테고리의 다른 글
SpringFrameWork CoreTechnition_section1_5부 (0) | 2020.11.18 |
---|---|
SpringFrameWork CoreTechnition_section1_4부 (0) | 2020.11.17 |
SpringFrameWork CoreTechnition_section1_3부 (0) | 2020.11.17 |
SpringFrameWork CoreTechnition_section1_2부 (0) | 2020.11.17 |
IOC 컨테이너_빈(BEAN)_의존성 주입(DI) 개념정리 (Spring) (0) | 2020.11.13 |
댓글