SPRING

[spring]의존 자동 주입 어노테이션

worri-pi 2021. 8. 20. 12:09

 

 

@Component로 등록한 빈의 자동 주입은 @Autowired , @Qualifier , @Resource를 사용한다.

 

 

1. @Autowired는 같은 타입의 객체를 찾아서 자동으로 할당한다. 찾는 순서는 이름 → 타입 → Qualifier → fail 이다. (객체 의존성을 가질 때, 쉽게 의존성 주입을 받을 수 있다.) spring container는 @Autowired를 확인하면 같은 타입의 객체가 메모리에 존재하는지 확인하고, 객체를 변수에 주입한다. 필드, 생성자, Setter에 사용 가능하다. (만약 메모리가 없다면 NoSuchBeanDefinitionException을 발생시킨다)

 

 

2. @Qualifier 는 의존성 주입 대상이 되는 타입의 객체가 두개 이상일 때 오류가 발생하지 않도록 @Autowired 아래에서 이름이나 아이디를 지정하여 사용한다. 

xml

<bean id="computer1" class="com.worri.dao">
	<qualifier value="user1">
</bean>
<bean id="computer2" class="com.worri.dao"/>
<bean id="computer3" class="com.worri.dao"/>

java

public class ComputerServiceUse{
	@Autowired
    @Qualifier("user1")
    private Computer computer;
    
    public ComputerServiceUse(){}
}

 

xml에서 통일한 타입의 bean 객체가 여러개 있을 경우 우선적으로 사용할 bean 객체 태그에 qualifier 태그를 설정한다. java에서 @Autowired와 @Qualifier를 함께 사용해서 qualifier태그의 value값과 동일한 값을 @Qualifier에 넣어준다. 우선적으로 computer1이 주입된다.

 

 

 

3. @Injection 는 @Autowired와 동일하게 작동하지만 같은 객체의 객체를 찾는 순서가 다르다. 타입 → Qualifier → 이름 → fail 이다. (하지만 Autowird 와 Qualifier 를 사용하는 것이 더 좋다고 한다.) 생성자, 필드, 메서드 모두 사용 가능하다.

 

-사용하기 위해  javax.annotation-api 의존성을 추가한다.

xml

<dependency>
	<groupId>javax.inject</groupId>
    <artifactId>java.inject</artifactId>
    <version>1</version>
</dependency>

 

 

 

4. @Resource 는 @Autowired 와 @Qualifier를 결합한 어노테이션이다. 주입하려고 하는 객체의 id와 일치하는 객체를 자동으로 주입한다. 생성자에는 적용할 수 없고 필드나 메서드(Setter)에 가능하다.

 

-혹시 오류가 난다면 javax.annotation-api 의존성을 추가한다.

xml

<dependency>
	<groupId>javax.annotation</groupId>
    <artifactId>javax.annotation-api</artifactId>
    <version>1.3.2</version>
</dependency>

 


@Componenet 만으로는 클래스 객체를 생성하였을 때 어떤 클래스가 어떤 역할을 수행하는지 알 수 없다. 분류를 위해 @Componenet를 상속한 어노테이션이 있다.

1. @Service : 비지니스 로직을 처리하는 service 클래스

2. @Repository : DB연동 처리하는 DAO 클래스(DB연동 과정에서 발생하는 예외를 변환해주는 특별한 기능 추가)

3. @Controller : 사용자 요청 제어하는 Controller 클래스(해당 객체를 MVC 아키텍처에서 컨트롤러 객체로 인식하도록 함

 

728x90