어노테이션 기반으로 의존성 주입은
스프링 설정파일(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가 선언되어있어 자동으로 스프링 설정파일에서 이름으로 찾아 의존성을 주입한다.
'공부 > Spring' 카테고리의 다른 글
Spring boot test 경로가 다른 패키지 테스트 시 오류 (6) | 2021.01.07 |
---|---|
Spring Data Rest 알아보기 (0) | 2020.11.20 |
옵셔널(optional)과 람다(lambda)를 이용하여 JpaRepository에서 예외 처리하기 (0) | 2020.11.17 |
Spring boot와 MySQL을 Docker 컨테이너로 올리기 (0) | 2020.08.22 |
스프링 프레임워크 기본 디렉토리 구조 (Spring Framework directory structure) (0) | 2020.03.05 |