DI(Dependency Injection 의존성 주입)
- 스프링의 특징으로, 객체를 직접 생성하는 것이 아니라 주입을 시켜주는 방식을 뜻한다.
DI를 활용하면 모듈 간의 결합도가 낮아지고 유연성이 높아지므로DI는 IoC를 실천하는 한 방식이라 할 수 있다.
DI 용어 정리
- 빈(Bean)
- 스프링이 IoC방식으로 관리하는 Object를 말한다.
- 스프링이 직접 그 생성과 제어를 담당하는 객체만을
Bean이라고 부른다.
- 빈 팩토리(Bean Factory)
- 스프링이 IoC를 담당하는 핵심
ContainerBean을 등록, 생성, 조회, 반환하는 기능을 담당- 일반적으로
BeanFactory를 바로 사용하지 않고 이를 확장한ApplicationContext를 이용한다.
- 어플리케이션 컨텍스트(ApplicationContext)
- 스프링이 제공하는 각종 부가 서비스를 추가 제공
BeanFactory라 부를 때는 주로Bean의 생성과 제어의 관점에서 이야기하는 것인 반면Application-Context는 스프링이 제공하는 Application 지원 기능을 모두 포함하여 이야기하는 것이라고 보면 된다.
DI
- 크게
XML을 통한 방식과Annotaion을 이용한 방식으로 나뉜다.빈 생성 범위 : 싱글톤 빈(Singleton Bean)
스프링 빈은 기본적으로
싱글톤으로 만들어진다. 그러므로Container가 제공하는 모든Bean의 Instance는 동일하다.
항상 새로운 Instance를 생성하여 반환하게 하고 싶으면scope를prototype으로 변경해야 한다.
Annotation으로Bean설정을 할 경우component-scan을 설정해야 한다.Spring Bean 설정과 관련된 Annotation의 종류
@Repository@Service@Controller@Component
DI - XML
- Application에서 사용할 Spring 자원들을 설정하는 파일
- Root tag는
<beans><bean>: Spring Container가 관리할 Bean 객체를 setting
<bean>의 기본속성
name: 주입 받을 곳에서 호출 할 이름 설정
id: 주입 받을 곳에서 호출 할 이름 설정(유일 값)
class: 주입 할 객체의 클래스
factory-method: Singleton pattern으로 작성된 객체의 factory method 호출
bean객체 얻기
설정 파일에서 설정한 bean을 Container가 제공하는 주입기 역할의api를 통해 주입 받는다.ApplicationContext context = new ClassPathXmlApplicationCntext("");1.
생성자(Constructor)이용
<bean>의 하위 태그로<constructor-arg>를 설정한다.
ref나value같은 하위 태그를 이용하여 설정한다.2.
setter(Property)이용
<bean>의 하위 태그로<property>를 설정한다.
ref나value같은 하위 태그를 이용하여 설정한다.