스프링 IoC Container와 Bean
- 📚 Spring/Spring 개념
- 2020. 7. 29. 16:47
일반적인 (의존성에 대한) 제어권: "내가 사용할 의존성은 내가 만든다."
// 예시
class OwnerController {
private OwnerRepository repository = new OwnerRepository();
}
📝 IoC(Inversion of Control)
- 의존관계주입(DI : Dependency Injection) 이라고도 한다. 의존 객체를 직접 만드는게 아니라 주입받아 사용받는 것을 말한다
- 스프링이 빈 객체를 관리한다. 빈의 의존성 관리해준다. 관리해준다는 건 필요한 의존성들을 각각 주입을 해준다는 것이다.
예시
class OwnerController {
private OwnerRepository repo;
public OwnerController(OwnerRepository repo) {
this.repo = repo;
}
// repo를 사용합니다.
}
class OwnerControllerTest {
@Test
public void create() {
OwnerRepository repo = new OwnerRepository();
OwnerController controller = new OwnerController(repo);
}
}
이와 같이 제 3자가 OwnerController의 생성자에 OwnerRepository를 만들어서 넣어줘야 한다. 넣어주지 않으면 OwnerController의를 만들수가 없다.
📝 IoC Container
- 빈을 만들고 빈들 사이의 의존성을 넣어주고 그렇게 만드러진 빈들을 제공해주는 일을 하는게 IoC컨테이너의 주요한 일이다.
- 빈들 끼리만 의존성 주입이 가능하다.
BeanFactory
- beanfoctory가 사실상 IoC 컨테이너이다.
- ApplicationContext가 BeanFactory를 상속받고 있으니 기능을 그대로 사용한다고 볼수 있다.
- IoC의 최상위 인터페이스이며, Bean의 라이프 사이클을 관리한다.
ApplicationContext
- 가장 많이 사용하는 BeanFactory의 하위 Interface이다.
- 환경설정, 메시지소스(다국어), Resource 로딩 등 수행한다.
📝 Bean
- IoC Container에서 관리하는 객체
- Component Scanning
- @Component
- @Repository, @Service, @Controller, @Configuration
- @Component
- 또는 직접 일일히 XML이나 자바 설정 파일에 등록
@Configuration 으로 bean 등록하는 방법
@Configuration
public class SampleConfig {
@Bean
public SampleRepository sampleRepository() {
return new SampleRepository();
}
}
Bean을 가져오는 방법(ApplicationContext)
@Autowired
ApplicationContext) applicationContext;
SampleController bean = applicationContext.getBean(SampleController.class);
의존성 주입
// Ioc
@Autowired
private OwnerRepository owners;
장점
- 의존성 관리
- Scode 정책이 존재한다.
- Singleton : 1개의 객체만 인스턴스로 사용(Default)
- Prototype : 매번 다른 인스턴스로 사용
- LifeCycle Interface가 존재하여 간편한 관리가 가능
'📚 Spring > Spring 개념' 카테고리의 다른 글
[Spring] 스프링 PSA (0) | 2020.08.23 |
---|---|
[Spring] 스프링 AOP 개념 및 적용 방법 (0) | 2020.08.21 |
[Spring] 의존성 주입(Dependency Injection) (0) | 2020.08.21 |
[Spring] Bean (0) | 2020.08.20 |
[Spring] 스프링 프레임워크(Spring Framework) 란? (0) | 2020.04.29 |