스프링 IoC Container와 Bean

일반적인 (의존성에 대한) 제어권: "내가 사용할 의존성은 내가 만든다."

// 예시
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
  • 또는 직접 일일히 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가 존재하여 간편한 관리가 가능

댓글

Designed by JB FACTORY