각 클래스 간 의존관계를 Bean 설정 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것
개발자는 단지 Bean 설정 파일에서 의존관계가 필요하다는 정보를 추가하면 된다
객체 레퍼런스를 컨테이너로부터 주입받아 실행 시에 동적으로 의존관계가 생성된다
컨테이너가 흐름의 주체가 되어 애플리케이션 코드에 의존관계를 주입해주는 것
클라이언트 기술인 Angular에서 DI가 사용된다
(1) 코드가 단순해진다 → 인터페이스만 선언되어 있으면 된다
(2) 컴포넌트 간 결합도가 제거된다, 객체 간 결합도를 낮춘다
(3) 한 곳에서 의존성 관리가 가능하다 → 클래스 내부에서 관리X
(1) Setter Injection: 의존성을 받는 setter 메소드를 만들고 이를 통해 의존성 주입
(2) Constructor Injection: 필요한 의존성을 포함하는 클래스의 생성자를 만들고 이를 통해 의존성 주입
(3) Method Injection: 의존성을 입력받는 일반 메서드를 만들고 이를 통해 의존성 주입
Spring DI 컨테이너가 관리하는 객체를 Bean이라하고 이를 관리한다는 의미로 컨테이너를 Bean Factory라 한다
Bean을 로딩하여 관리할 뿐만 아니라 각 Bean들의 의존성을 관리
객체 생성과 객체 사이 런타임 관계를 DI 관점에서 볼 때는 컨테이너를 Bean Factory라 한다
Bean Factory에 여러 가지 컨테이너 기능을 추가해서 애플리케이션 컨텍스트라고 부름
Bean을 생성,등록,조회,반환 관리한다
보통 바로 사용하지 않고 이를 확장한 Application Context 를 사용한다
getBean() 메서드가 정의되어있다
Bean Factory와 마찬가지로 Bean을 생성,등록,조회,반환 관리한다
Spring의 각종 부가 서비스를 추가로 제공한다
Spring이 제공하는 Application Context 구현 클래스가 여러 종류가 있다
<beans>
코드 내 <bean>
등록<bean id="helloService" class="com.shinsegae_inc.hello.service.HelloService"/>
(1) setter
1. Service 파일에 다음과 같이 setter 메소드 작성
//setter 이용
public void setHelloDAO(HelloDAO dao) {
this.helloDAO = dao;
}
<bean>
태그 내 <property>
삽입 <bean id="helloService" class="com.shinsegae_inc.hello.service.HelloService">
<property name="helloDAO" ref="helloDAO"></property>
</bean>
(2) 생성자
1. Service 파일에 다음과 같이 생성자 생성
//생성자 이용
public HelloService(HelloDAO helloDAO) {
this.helloDAO=helloDAO;
}
<bean>
태그 내 <constructor-arg>
삽입 <bean id="helloService" class="com.shinsegae_inc.hello.service.HelloService">
<constructor-arg ref="helloDAO"></constructor-arg>
</bean>