Spring IoC Container
스프링 IoC 컨테이너와 번 설정 방법들에 대해서 알아본다.
컨테이너
- 적절한 설정만 되어있다면 누구의 도움 없이도 프로그래머가 작성한 코드를 스스로 참조한 뒤 알아서 객체의 생성과 소멸을 컨트롤해준다.
IoC(Inversion of Conrol) 제어의 역전
- 어떤 객체가 사용하는 의존 객체를 직접 만들어 사용하는 게 아닌, 주입받아 사용하는 방법
- 스프링 프레임워크에서는 인스턴스의 생성부터 소멸까지 인스턴스의 생명주기를 개발자가 아닌 IoC 컨테이너가 대신해준다.
스프링 IoC 컨테이너
- BeanFactory Interface(가장 최상위에 있는 인터페이스)
- 애플리케이션 컴포넌트의 중앙 저장소.
- 빈 설정 소스로부터 빈 정의를 읽고, 빈을 구성하고 제공한다.
빈(Bean)
- 스프링 IoC 컨테이너가 관리하는 객체
- 의존성 주입을 하기 위해서는 인스턴스를 빈으로 등록하여야 한다.
IoC 컨테이너 빈의 장점
- 의존성 관리를 IoC 컨테이너가 하므로 비즈니스 로직에만 신경을 쓰면 된다.
- 객체의 생성과 소멸 등 생명주기를 관리해주므로 메모리를 효율적으로 사용할 수 있다.
- 라이프사이클 인터페이스를 이용하여 원하는 작업을 할 수 있다.
ApplicationContext
- BeanFactory를 상속받아 그 기능을 가지고 있으면서 추가적으로 다양한 기능들을 가지고 있는 인터페이스로 많이 사용된다.
Application Context와 다양한 빈 설정 방법
스프링 IoC 컨테이너의 역할
- 빈 인스턴스 생성
- 의존 관계 설정
- 빈 제공
빈 설정 방법
1) xml에 직접 등록
- 빈 설정을 위해 UserRepository와 UserService를 만든다.
- resources 아래에 bean설정 xml을 만들고 아래와 같이 작성한다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userService"
class="me.sun.spring.UserService">
<property name="userRepository" ref="userRepository"/>
</bean>
<bean id="userRepository"
class="me.sun.spring.UserRepository"/>
</beans>
- xml을 통해 빈을 주입할 수 있다.
- property tag에 값을 설정하면 된다.
- name은 Class의 bookRepository이고 ref는 xml에 설정한 bean의 id이다.
- 위의 결과를 true가 출력될 것이다.
2) xml에 컴포넌트 스캔 등록
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="me.sun.spring"/>
</beans>
- xml에 컴포넌트 스캔을 설정한 후 각 Service와 Repository에 Annotation으로 빈을 등록할 수 있다.
- 컴포넌트 스캔에 등록된 package이하의 모든 클래스에 적용이 가능하다.
- @Autowried 혹은 생성자 등 다양한 방법으로 등록된 빈을 주입할 수 있다.
3) 클래스로 등록
- 위에서 설정한 xml 설정을 제거한다.
- 그리고 ApplicationConfig를 만들어 빈으로 등록하고 싶은 객체를 @Bean 통해 설정한다.
- 그 후 ApplicationContext를 통해 빈으로 등록이 가능하다.
4) 클래스단에 컴포넌트 스캔 등록
- 이렇게 컴포넌트 스캔을 등록하면 MySpringApplication.class이하의 모든 클래스들을 스캔하여 빈으로 등록을 한다.
- 단 이렇게 사용하기 위해서는 2)와 같이 빈으로 등록하고 싶은 곳에 @Component 부류의 Annotation을 붙여줘야 한다.
5) 스프링 부트를 사용
- 스프링 부트를 사용하면 따로 컴포넌트 스캔을 사용할 필요가 없다.
- 왜냐하면 @SpringBootApplication의 Annotation을 확인해보면 이미 @COmponentScan이 등록되어 있다.
'스프링 > 스프링 핵심 기술' 카테고리의 다른 글
6. IoC 컨테이너: MessageSource (0) | 2019.12.14 |
---|---|
5. IoC 컨테이너: Environment(Profile, Property) (0) | 2019.12.12 |
4. IoC 컨테이너: 빈의 스코프 (0) | 2019.12.12 |
3. IoC 컨테이너: @Component와 ComponentScan (0) | 2019.12.11 |
2. IoC 컨테이너: @Autowire (0) | 2019.12.10 |