공부/Spring

스프링 프레임워크 어노테이션 기반 의존성 주입 (@Autowired, @Resource, @Inject)

2020. 3. 8. 10:31

어노테이션 기반으로 의존성 주입은

스프링 설정파일(ex. applicationContext.xml)에 주입하려는 객체를 찾아 의존성을 주입한다.

 

스프링 설정파일에 추가 해야할 사항

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"  -- 여기
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans.xsd 
 		http://www.springframework.org/schema/context 		-- 여기
 		http://www.springframework.org/schema/context/spring-context.xsd">	-- 여기

	<context:annotation-config />	-- 여기

@Autowired

타입이 일치하는 객체를 자동으로 주입 (주로 가장 많이 사용됨)

 

생성자, 속성, 메서드위에 어노테이션을 선언하여 사용할 수 있다.

단, 속성이나 메서드 위에 선언하여 사용시 디폴트 생성자를 명시 해야한다.

 

스프링 설정파일에 중복된 값이 있을 경우 Qualifier를 사용한다.

@Qualifier("객체id값")

 

required 속성

@Autowired(required = false)

스프링 설정 파일에 주입할 객체가 없을 경우 에러 처리 하지 않음

 

@Inject

@Autowired와 비슷하나 required 속성이 존재하지 않음.

@Qualifier대신 @Named(value="객체id값")을 사용한다.

@Resource

이름이 일치하는 객체를 자동으로 주입

 

생성자에는 사용이 불가능하고, 속성이나 메소드에 사용 가능하다.

 

에러가 나서 확인해보니 아래 구문을 추가하여 resource 어노테이션 사용이 가능하다

import javax.annotation.Resource;

 

 

 

 

예시

스프링 설정파일

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans.xsd 
 		http://www.springframework.org/schema/context
 		http://www.springframework.org/schema/context/spring-context.xsd">

	<context:annotation-config />
    
    <bean id="studentDao" class="com.student.dao.StudentDao" />

 

Autowired

import org.springframework.beans.factory.annotation.Autowired;

public class StudentRegistService {

    // 속성
    private studentDao;

    // 생성자
    @AutoWired
    public StudentRegistService(StudentDao studentDao) {
        this.studentDao = studentDao;
    }
 }

Resource

import javax.annotation.Resource;

public class StudentRegistService {

    // 속성
    @Resource
    private studentDao;

    // 디폴트 생성자 명시 해야함
    public StudentRegistService() {
    }
 }

 

Autowired는 StudentRegistService객체를 가져올때 StudentDao를 매개변수로 받는 생성자를 실행 시킨다.

이때 @Autowired가 선언되어있어 자동으로 StudentDao를 스프링 설정파일에서 타입으로 찾아 의존성을  주입한다.

 

Resource는 StudentRegistService객체를 가져올때 디폴트 생성자를 실행 시킨다.

멤버 변수에 @Resource가 선언되어있어 자동으로 스프링 설정파일에서 이름으로 찾아 의존성을 주입한다.

반응형