스프링 프레임워크는 객체에 대한 생성 및 생명주기를 관리할 수 있는 기능을 제공하고 있다
IOC (Inversion of Control)
즉 개발자가 할 일을 프레임워크에서 대신한다는 뜻이다
1. IOC 컨테이너는 객체의 생성을 책임지고, 의존성을 관리한다.
2. POJO(Plain Old Java Object)의 생성, 초기화, 서비스, 소멸에 대한 권한을 가진다.
3. 개발자들이 직접 POJO를 생성할 수 있지만 컨테이너에게 맡긴다.
DL : 의존성 검색 => 저장소에 저장되어 있는 Bean에 접근하기 위해 컨테이너가 제공하는 API를 이용하여 Bean을 look up 한다
DI : 의존성 주입 => 각 클래스간의 의존관계를 빈 설정 정보를 바탕으로 컨테이너가 자동으로 연결 해 주는 것
setter injection, constructor injection, method injection으로 의존관계를 정리한다.
DI상세 설명
Bean Definition 정보를 바탕으로 컨테이너가 자동으로 연결한다
개발자들은 단지 빈 설정파일에서 의존관계가 필요하다는 정보를 주가하면 된다. (xml 이나 annotation으로)
객체 레퍼런스를 컨테이너로 부터 주입받아서 실행시에 동적으로 의존관계가 생성된다
장점 : 1. 코드가 단순해진다
2. 컴포넌트 간의 결합도가 제거된다
ex) A 클래스내에 B 클래스를 생성하는 코드가 있는데
그 안에서 new B(); 로 직접 생성하는 것이 아닌 A와 B가 의존관계가 있다 라는 것만 설정해놓으면 컨테이너가 알아서 해준다.
setter injection : setter 메서드를 통해 의존성을 주입
contructor injection : 생성자를 이용한 의존성 삽입
method injection : 메소드를 이용한 의존성 삽입
왼쪽 상단 클래스는 인터페이스만 가져다 쓰고 설정파일에 (xml)에 구현클래스를 쓴다고 구현해 놓는다.
오른쪽 그림처럼 beans.xml 에 설정을 해 놓는다. 컨테이너가 beans.xml 을 읽어서 의존관계 주입을 런타임에 동적으로 해준다.
Setter Injection
오른쪽 자바 파일에서는 new Printer(); 라는 직접적인 객체 생성 코드가 존재하지 않는다.
bean (스프링이 관리해주는 자바 객체)
Constructor Injection
한번에 여러개의 인자를 생성자에 받을 수 있다
Spring DI 컨테이너
Spring DI 컨테이너가 관리하는 객체를 빈(bean)이라고 하고, 이 빈(bean)들을 관리한다는 의미로 컨테이너를 빈 팩토리라고 한다.
'프로그래밍 > Spring' 카테고리의 다른 글
[SpringOneTour] 스프링을 만든 Pivotal사가 한국을 방문했다! (0) | 2018.11.08 |
---|---|
[IntelliJ] 스프링 프로젝트 초기 세팅하기 - (1) (3) | 2017.04.30 |
Spring MVC (0) | 2017.01.03 |
AOP (0) | 2017.01.02 |
Spring JDBC & JdbcTemplate (0) | 2017.01.02 |