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)
'Spring > 새롭게 얻은 정보들' 카테고리의 다른 글
[Spring] FileUpload 썸네일 확장자 dependency (0) | 2022.04.15 |
---|---|
[MaBatis] MyBatis 란? (0) | 2020.12.15 |
Spring - 의존(Dependency Injection) (0) | 2020.05.04 |