온 코딩

[Spring] DI 설정 - 어노테이션 본문

복습 ARCHIVE/모델별 프로젝트

[Spring] DI 설정 - 어노테이션

SummerON 2021. 6. 16. 15:34

DI 설정 방법

1. 설정 파일 내의 <bean></bean>으로 설정

2. 설정 파일 내에서 검색하는 방법

   1) 조건 <beans ~~~~>의 xmlns 추가 (context)

            xmlns:context="http://www.springframework.org/schema/context"

   2) 검색 될 컴포넌트(클래스)들은 선언부 상단에 @Component 어노테이션이 있어야함

   3) 설정 파일 내에서는 <component-scan>을 이용하여 검색할 수 있다.

   4) 만약 검색 범위(패키지)를 설정 할 경우에는 base-package=""속성을 사용하여 설정 

       <context:component-scan base-package="검색패키지"></context:component-scan>

 

 

어노테이션 종류

1. @Autowired

   : (스프링 제공) 주로 멤버변수 상단에 사용, 생성자나 메서드에도 사용 가능 

 -  Spring Container는 @AutoWired을 만나는 순간 해당 변수의 데이터 타입을 확인 

 - Spring  Container의 객체 중 해당 타입을 가진 객체를 자동 주입(<bean>으로 선언된거나 @Component된 것 중)

 => 객체가 선언 되어 있어야함~~!

 - 객체 타입을 이용하여 의존성 주입 : 동일한 타입의 객체가 여러개일 경우 @Qualifier로 추가지정을 해줘야함

 

2. @Qualifier

   : (Spring 제공)Spring Container내에 동일한 타입을 갖는 객체가 여러 개일 경우 특정 객체를 지정하여 Spring Container가 혼돈하지 않도록 설정 // 특정 객체를 설정 

만약 @Qualifier("객체명") 에서 객체명을 지정하지 않으면 NoUniqueBeanDefinitionException오류 발생

 

3. @Inject - @Autowired랑 기능이 같음 

 

4. @Resource 

 : 객체 이름을 이용하여 주입

- @Resuorce(name="객체명")과 같이 지정 가능 

 

* @Autowired가 있는 멤버 변수의 타입과 동일한 타입을 갖는 객체가 한 개만 존재할 경우에는 @AutoWired를 사용

여러 개일 경우에는 @Resource가 편리

지정된 객체 이름이 없을 경우 : NoSuchBeanDefinitionException

 

어노테이션과 XML설정을 병행하여 사용

: xml -> 자바 코드를 수정하지 않아도 되서 유지보수가 편함 BUT 설정이 많아지면 xml 문서 관리가 복잡

: 어노테이션 -> xml 부담이 없고 자바 코드 해석이 편함 BUT 자바코드 수정이 필요함 

 

1. 특정 컴포넌트에 주입되는 객체가 자주 변경 되어야 할 경우에는 <bean>태그 사용

2. 특정 컴포넌트에 주입되는 객체가 고정일 경우에는 @Component(주입되는 클래스)와 @Autowired , @Qualifier("객체명")(주입받는 클래스 내부변수) 를 이용하여 설정 

 

* 단 ~~.jar처럼 라이브러리 형태로 제공되는 클래스는 반드시 설정 파일 내에 <bean>으로 설정

(아파치 톰캣, 스프링 프레임워크가 제공하는 클래스는 반드시 <bean>으로 지정 ex)DispatcherServlet클래스)

 

프레젠테이션레이어와 비즈니스레이어로 구성 된 시스템 구조

 

Comments