본문 바로가기
웹개발/스프링

스프링 4 DI

by 인생여희 2020. 11. 7.

스프링 DI는 인터페이스를 이용해서 컴포넌트화를 실현하는 것이다. 쉽게말하면 의존관계를 주입한다고도 한다. 이 말은 어떤 오브젝트의 프로퍼티(인스턴스 변수)에 그 오브젝트가 이용할 오브젝트를 셋팅(주입)한다는 의미다. 다시말하면 어떤 오브젝트가 의존(이용)할 오브젝트를 주입, 인젝션 한다는 뜻이다.

 

빈의 생명주기

Bean의 생명주기 출처:이미지 우측 하단.

BeanFactory 상속관계

예제 프로젝트 구조

어노테이션을 이용한 스프링 DI 예제

 

ProductSampleRun.java

@Autowire를 붙이면 DI 컨테이너가 그 인스턴스 변수의 형에 대입할 수 있는 클래스를, 

@Componet 가 붙은 클래스중에서 찾아서 @Autowire가 붙은 변수에 인젝션 해준다.(Bean정의에서 스탠할 범위지정필요)

@Componet가 붙은 클래스가 여러개 있어도 형이 다르면 @Autowire가 붙은 변수 인젝션 안된다. (byType)

인스턴스 변수로의 인젝션은 접근 제어자가 private이어도 인젝션할 수 있으므로 set메소드가 필요없다. 

그리고 xml로 기술된 Bean 정의 파일도 만들어야한다. -> applicationContext.xml

 

applicationContext.xml

- bean 정의 파일이다.

- bean 스키마 :bean(컴포넌트) 설정

- context 스키마 : bean(컴포넌트) 검색과 어노테이션 설정

- aop, tx mvc 스키마 등 존재.. 

 

 

Product.java

ProductDao.java

ProductDaoImpl.java

ProductService.java

ProductServiceImpl.java

 @Autowire를 붙이면 DI 컨테이너가 그 인스턴스 변수의 형에 대입할 수 있는 클래스를 

 @Componet 가 붙은 클래스중에서 찾아서 @Autowire가 붙은 변수에 인젝션 해준다.(Bean정의에서 스탠할 범위지정필요)

 @Componet가 붙은 클래스가 여러개 있어도 형이 다르면 @Autowire가 붙은 변수 인젝션 안된다. (byType)

 인스턴스 변수로의 인젝션은 접근 제어자가 private이어도 인젝션할 수 있으므로 set메소드가 필요없다.  

그리고 xml로 기술된 Bean 정의 파일도 만들어야한다. -> applicationContext.xml

 

 

파일경로

 

예제 파일

di-annotation.zip
0.04MB

 

 

 

 

 

참고: 스프링 4입문 (한빛미디어)

'웹개발 > 스프링' 카테고리의 다른 글

스프링 4 MVC - part 1  (0) 2020.11.10
스프링 4 비즈니스 로직 설계와 트랜잭션  (0) 2020.11.09
스프링 4 DAO 구현  (1) 2020.11.08
스프링 4 AOP  (0) 2020.11.08
스프링 4 Bean Config  (0) 2020.11.07