반응형

 

Autowired 란?

의존 대상을 설정 코드에서 직접 주입하지 않고 스프링이 자동으로 의존하는 빈 객체에 주입해주는 것을 자동 주입해주는 것 을 뜻합니다.

 

Autowired 설정하는 방법은 간단합니다.

 

1
2
3
4
5
6
7
8
9
10
11
@Service
public class GogekService {
    
    @Autowired
    private GogekDao GogekDao;
 
    
    public void setGogekDao(GogekDao gogekDao) {
        this.gogekDao = gogekDao;
    }
}
 

 

4 행에서 GogekDao 필드에 @Autowired 어노테이션을 추가해주었습니다.

@Autowired 어노테이션을 붙이면 설정 클래스에서 의존 주입을 하지 않아도 됩니다.

 

필드에 어노테이션이 붙어있으면 스프링이 해당 타입의 객체를 찾아 할당합니다.

 

 

Qualifier

 

자동 주입 가능한 빈이 2개 이상이면 주입할 빈을 따로 지정할 때 사용하는 어노테이션 종류입니다.

 

@Qualifier 어노테이션 사용 방법 1.

1
2
3
4
5
6
7
8
9
@Configuration
public class Gogek {
 
    @Bean
    @Qualifier("info")
    public GogekInfo gogekInfo() {
        return new GogekInfo();
    }
}

 

해당 소스코드에서 gogekInfo() 메서드에 "info" 값인 @Qualifier 어노테이션을 붙여 해당 빈의 한정하여 "info" 로 준다.

 

 

@Qualifier 어노테이션을 사용 방법 2.

1
2
3
4
5
6
7
8
9
10
11
12
public class Gogek {
    private GogekDao gogekDao;
    private GogekInfo info;
 
    ....
 
    @Autowired
    @Qualifier("info")
    public void setGogekInfo(GogekInfo info) {
        this.info = info;
    }
}
 

 

해당 소스코드는 setGogekInfo() 메서드에 @Autowired 어노테이션을 붙였으므로 GogekInfo타입의 빈을 자동으로 주입해줍니다.

여기서 Qualifier 값은 "info" 이므로 한정 값을 info로 의존 주입 후보로 지정합니다.

 

- 빈 이름과 기본 한정자

 

1
2
3
4
5
6
7
8
@Configuration
public class Gogek {
 
    @Bean
    public GogekInfo gogekInfo() {
        return new GogekInfo();
    }
}

 

Qualifier로 별도 지정해주지 않은 메소드의 경우는 메소드의 이름을 빈 이름으로 사용하게 됩니다.

 

여기서는 gogekInfo가 한정자가 됩니다.

 

Autowired는 필수사항일까 ?

 

Autowired는 붙인 타입에 해당하는 빈이 존재하지 않으면 오류를 출력한다.

 

이렇게 자동 주입할 빈이 없으면 불필요하게 Autowired를 사용할 필요가 없는 것이다. 그런 경우 Autowired의 속성을 false로 지정해주면 해결된다.

 

@Autowired(required = false)

반응형

+ Recent posts