[관계 이해도]
IOC에서 사용할 객체A를 생성 하려 한다. 이때 DI를 통해 외부에서 객체A와 같은 타입의 객체A를 생성한 뒤 IOC contaner에 주입을 시켜준다. 이때 의존관계가 설정되고 주입된 객체A를 Bean Object라 한다.
객체의 생성, 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는 것을 의미한다.
객체에 대한 생성 및 생명주기를 관리할 수 있는 기능
- IoC 컨테이너는 객체의 생성을 책임지고, 의존성을 관리한다.
- POJO의 생성, 초기화, 서비스, 소멸에 대한 권한을 가진다.
- 개발자들이 직접 POJO를 생성할 수 있지만 컨테이너에게 맡긴다.
*POJO : 특정 자바 모델이나 기능, 프레임워크 등을 따르지 않은 자바 오브젝트
다른 객체를 사용할 때 해당 객체의 외부에서 생성한 의존성이 걸린 객체를 주입한다.
상세한 기능은 다음과 같다.
- IOC가 객체를 생성하려 한다.
- 의존성이 필요한 객체의 멤버변수를 조사한다.
- 의존성이 필요한 객체의 멤버변수와 동일한 타입의 객체를 외부에 생성한다.
- 외부에 생성한 객체를 주입한다.(의존관계를 주입해 주는 것이다.)
Spring IoC 컨테이너가 관리하는 자바 객체를 빈(Bean)이라는 용어로 부른다.
- 우리가 new 연산자로 어떤 객체를 생성했을 때 그 객체는 빈이 아니다.
- ApplicationContext.getBean()으로 얻어질 수 있는 객체는 빈이다.
- Spring에서의 빈은 ApplicationContext가 알고있는 객체
즉, ApplicationContext가 만들어서 그 안에 담고있는 객체를 의미한다.
[참고자료]
https://dog-developers.tistory.com/12
https://ko.wikipedia.org/wiki/Plain_Old_Java_Object
https://atoz-develop.tistory.com/entry/Spring-%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B9%88Bean%EC%9D%98-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%83%9D%EC%84%B1-%EC%9B%90%EB%A6%AC
좋아용~!