본문 바로가기

Server Programming/Spring Boot Full-Stack Programming

[스프링 풀스택 클론 코딩] 의존성 주입 방법

반응형

스프링의 특징인 의존성 주입 방법

의존성 주입 :  클래스간의 의존관계를 스프링 컨테이너가 자동으로 연결해주는 것

 

1) Setter Injection : setter/getter 메서드의 setter 메서드를 통해 의존관계에 있는 객체를 주입

- <property> 태그를 통해 의존관계에 있는 bean을 주입

- ref 속성 : Bean의 레퍼런스를 주입하고자 하는 경우 사용하는데, 스프링이 Bean id를 통해 Bean을 찾아 주입

- value 속성 : 관련 객체가 아닌 단순 값을 주입하고자 하는 경우 

 

@Resource어노테이션은 변수와 세터 메서드를 빈 이름(name)으로 자동연결합니다. 그러나 여러 인수를 받는 메서드 등의 경우에는 @Resource를 사용할 수 없습니다. 

 

 

 


2) Constructor injection : 생성자를 통해 의존 관계에 있는 객체를 주입

- 생성자를 통해 의존관계가 있는 객체를 주입하는 경우 <constructor arg > 태그를 사용

 

타입(Type)을 이용해 주입하는 방법으로

 

@Autowired 가 Type으로 찾아서 주입하므로 동일한 Bean 타입의 객체가 여러개 있을 경우, Bean을 찾기 위해 @Qualifier 어노테이션을 같이 사용 

 

<context:component scan > 태그

@Autowired로 의존 관계를 주입받을 경우, 해당 클래스(@Autowired당하는 클래스)를 반드시 Component Auto Scanning을 설정 필수

<context:component-scan base-package="factory.userfactory" />

Setter와 Constructor 의존성 주입 차이

 

(1) 의존성 주입  : @Autowired 는 타입, @Resource는 이름으로 의존성을 주입

 

(2) 적용 위치 : @Autowired 는 변수, 생성자, Setter메서드, 일반 메서드 등에 적용 가능하지만, @Resource는 변수, Setter메서드등에 적용 가능

 

(만약 bean이 Map타입인 경우,  @Autowired 애노테이션이 제대로 작성하지 않기 때문에 @Resource 사용)


@Autowired와 함께 쓰이는 @Qualifier의 특징과 사용

 

1) 유일한 빈 구별 : @Autowired로 연결한 빈 목록에서 유일한 빈을 구별합니다. @Qualifier(value ="빈이름") 

스프링 컨테이너가 @Autowired 를 설정한 필드, 생성자 등 타입으로 후보 빈을 찾는데, 그 후 @Qualifier를 통해 유일한 빈을 구별합니다. 

 

2) 타입 지정 : 연결할 빈의 값 타입을 지정합니다. @Qualifier("serviceName")

연결할 빈의 타입을 지정한 경우 springbeans.xml에 선언한 이름을 작성해줍니다. 

 

> Qualifier

@Autowired
@Qualifier("abService")

 

> springbeans.xml

<bean id="abService" class="spring.service.ABService"></bean>
<bean id="bcService" class="spring.service.BCService"></bean>

 

반응형