๋ชฉ์ฐจ
- ์์กด ๊ฐ์ฒด ์๋ ์ฃผ์
- @Autowired, @Resource, @Inject
- ์์กด๊ฐ์ฒด ์ ํ
- ์์กด๊ฐ์ฒด ์๋ ์ฃผ์ ์ฒดํฌ
์์กด ๊ฐ์ฒด ์๋ ์ฃผ์
์คํ๋ง ์ค์ ํ์ผ์์ ์์กด ๊ฐ์ฒด๋ฅผ ์ฃผ์ ํ ๋, <constructor-org> ๋๋ <property> ํ๊ทธ๋ก ์์กด ๋์ ๊ฐ์ฒด๋ฅผ ๋ช ์ํ์ง ์์๋ ์คํ๋ง ์ปจํ ์ด๋๊ฐ ์๋์ผ๋ก ํ์ํ ์์กด ๋์ ๊ฐ์ฒด๋ฅผ ์ฐพ์์ ์์กด ๋์ ๊ฐ์ฒด๊ฐ ํ์ํ ๊ฐ์ฒด์ ์ฃผ์ ํด ์ฃผ๋ ๊ธฐ๋ฅ์ด๋ค.
@Autowired
์ฃผ์ ํ๋ ค๊ณ ํ๋ ๊ฐ์ฒด์ ํ์ ์ด ์ผ์นํ๋ ๊ฐ์ฒด๋ฅผ ์๋์ผ๋ก ์ฃผ์
- @Autowired๋ ํ๋, ์์ฑ์, Setter์ ๋ถ์ผ ์ ์๋ค.
- ๋จ, @Autowired๋ฅผ ํ๋, Setter์ ๋ถ์ฌ์ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ฐ๋์ ๊ธฐ๋ณธ ์์ฑ์๊ฐ ์ ์๋์ด ์์ด์ผ ํ๋ค.
1) @Autowired - ํ๋ ์ฃผ์
public class WordRegisterServiceUseAutowired {
@Autowired
private WordDao wordDao;
public WordRegisterServiceUseAutowired() { }
}
2) @Autowired - ์์ฑ์ ์ฃผ์
public class WordRegisterServiceUseAutowired {
private WordDao wordDao;
@Autowired
public WordRegisterServiceUseAutowired(WordDao wordDao) {
this.wordDao = wordDao;
}
}
3) @Autowired - Setter ์ฃผ์
public class WordRegisterServiceUseAutowired {
private WordDao wordDao;
public WordRegisterServiceUseAutowired() { }
@Autowired
public void setWordDao(WordDao wordDao) {
this.wordDao = wordDao;
}
}
@Resource
์ฃผ์ ํ๋ ค๊ณ ํ๋ ๊ฐ์ฒด์ ์ด๋ฆ(id)์ด ์ผ์นํ๋ ๊ฐ์ฒด๋ฅผ ์๋์ผ๋ก ์ฃผ์
- @Resource๋ Java ์ ๊ณต ์ ๋ ธํ ์ด์ ์ด๋ฉฐ ํ๋, Setter์ ๋ถ์ผ ์ ์๋ค. ์์ฑ์์๋ ๋ถ์ผ ์ ์๋ค.
- @Autowired์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐ๋์ ๊ธฐ๋ณธ ์์ฑ์๊ฐ ์ ์๋์ด ์์ด์ผ ํ๋ค.
1) ์์กด์ฑ ์ค์
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
ํ๋ก์ ํธ์์ ์ฌ์ฉํ๊ธฐ ์ํด javax.annotation-api ์์กด์ฑ์ ์ถ๊ฐํ๋ค.
2) @Resource - ํ๋ ์ฃผ์
import javax.annotation.Resource;
public class WordRegisterServiceUseResource {
@Resource
private WordDao wordDao;
public WordRegisterServiceUseResource() { }
}
3) @Resource - Setter ์ฃผ์
import javax.annotation.Resource;
public class WordRegisterServiceUseResource {
private WordDao wordDao;
public WordRegisterServiceUseResource() { }
@Resource
public WordRegisterServiceUseResource(WordDao wordDao) {
this.wordDao = wordDao;
}
}
@Inject
์ฃผ์ ํ๋ ค๊ณ ํ๋ ๊ฐ์ฒด์ ํ์ ์ด ์ผ์นํ๋ ๊ฐ์ฒด๋ฅผ ์๋์ผ๋ก ์ฃผ์ ( โ @Autowired )
- @Resource๋ Java ์ ๊ณต ์ ๋ ธํ ์ด์ ์ด๋ฉฐ ํ๋, ์์ฑ์, Setter์ ๋ถ์ผ ์ ์๋ค.
- @Autowired์ ๋ง์ฐฌ๊ฐ์ง๋ก ํ๋, Setter์ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ฐ๋์ ๊ธฐ๋ณธ ์์ฑ์๊ฐ ์ ์๋์ด ์์ด์ผ ํ๋ค.
- @Autowired์ ๋ฌ๋ฆฌ, required์์ฑ์ ์ง์ํ์ง ์๋๋ค.
1) ์์กด์ฑ ์ค์
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
ํ๋ก์ ํธ์์ ์ฌ์ฉํ๊ธฐ ์ํด javax.inject ์์กด์ฑ์ ์ถ๊ฐํ๋ค.
2) @Inject - ํ๋ ์ฃผ์
import javax.inject.Inject;
public class WordRegisterServiceUseAutowired {
@Inject
private WordDao wordDao;
public WordRegisterServiceUseAutowired() { }
}
3) @Inject - ์์ฑ์ ์ฃผ์
import javax.inject.Inject;
public class WordRegisterServiceUseAutowired {
private WordDao wordDao;
@Inject
public WordRegisterServiceUseAutowired(WordDao wordDao) {
this.wordDao = wordDao;
}
}
4) @Inject - Setter ์ฃผ์
import javax.inject.Inject;
public class WordRegisterServiceUseAutowired {
private WordDao wordDao;
public WordRegisterServiceUseAutowired() { }
@Inject
public void setWordDao(WordDao wordDao) {
this.wordDao = wordDao;
}
}
์์กด ๊ฐ์ฒด ์ ํ
๋์ผํ ๊ฐ์ฒด๊ฐ 2๊ฐ ์ด์์ธ ๊ฒฝ์ฐ ์คํ๋ง ์ปจํ ์ด๋๋ DI ๋์ ๊ฐ์ฒด๋ฅผ ํ๋จํ์ง ๋ชปํด์ Exception์ ๋ฐ์์ํจ๋ค.
โ @Qualifier์ @Named๋ฅผ ์ด์ฉํด์ ๊ฐ์ฒด๋ฅผ ์ฐ์ ์ ์ผ๋ก ์ ํํ ์ ์๋ค.
1) @Qualifier (@Autowired์ธ ๊ฒฝ์ฐ)
(์คํ๋ง ์ค์ ํ์ผ)
<bean id="wordDao" class="com.word.dao.WordDao">
<qualifier value="usedDao"> //์ด ๊ฐ์ฒด๋ฅผ ์ฐ์ ์ ์ผ๋ก ์ ํํ๊ฒ ๋ค!
</bean>
<bean id="wordDao2" class="com.word.dao.WordDao"></bean>
<bean id="wordDao3" class="com.word.dao.WordDao"></bean>
(Java ํ์ผ)
@Autowired
@Qualifier("usedDao") //์ด ๊ฐ์ฒด๋ก ๊ฐ์ ์ฌ์ฉ
private WordDao wordDao;
2) @Named (@Inject์ธ ๊ฒฝ์ฐ)
(์คํ๋ง ์ค์ ํ์ผ)
<bean id="wordDao" class="com.word.dao.WordDao"></bean> //์ด ๊ฐ์ฒด๋ฅผ ์ฐ์ ์ ์ผ๋ก ์ ํํ๊ฒ ๋ค!
<bean id="wordDao2" class="com.word.dao.WordDao"></bean>
<bean id="wordDao3" class="com.word.dao.WordDao"></bean>
(Java ํ์ผ)
@Inject
@Named(value="wordDao") //์ด ๊ฐ์ฒด๋ก ๊ฐ์ ์ฌ์ฉ
private WordDao wordDao;
์์กด๊ฐ์ฒด ์๋ ์ฃผ์ ์ฒดํฌ
์์กด๊ฐ์ฒด ์๋ ์ฃผ์ ์ @Autowired๋ฅผ ์ด์ฉํด์ ํ๋๋ฐ, ๊ทธ ์์กด๊ฐ์ฒด ์๋ ๊ฒฝ์ฐ์ Exception์ ๋ฐ์์ํค์ง ์๊ฒ ํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
(์คํ๋ง ์ค์ ํ์ผ)
<!-- <bean id="wordDao" class="com.word.dao.WordDao"></bean> --> ์ฃผ์์ฒ๋ฆฌ๋จ!
<bean id="registerService" class="com.word.dao.WordDao"></bean>
(Java ํ์ผ)
@Autowired
private WordDao wordDao;
์ ์ฝ๋๋ฅผ ๋จผ์ ๋ณด์.
Javaํ์ผ์์ bean๊ฐ์ฒด(id๊ฐ wordDao์ธ)๋ฅผ ์ ํํ๋ผ๊ณ @Autowired์ต์ ์ ์คฌ๋๋ฐ, ๊ทธ์ ๋ง๋ ๊ฐ์ฒด๊ฐ ์์ฑ๋์ง ์์์ ์ ์ฝ๋๋ฅผ ์คํํ๋ฉด Exception์ด ๋ฐ์ํ๋ค.
์ด๋ฌํ Exception์ @Autowired์ ์์ฑ ์ค required๋ฅผ false๋ก ์ค์ ํ๋ฉด ๋ฐฉ์งํ ์ ์๋ค.
(์คํ๋ง ์ค์ ํ์ผ)
<!-- <bean id="wordDao" class="com.word.dao.WordDao"></bean> --> ์ฃผ์์ฒ๋ฆฌ๋จ!
<bean id="registerService" class="com.word.dao.WordDao"></bean>
(Java ํ์ผ)
@Autowired(required = false)
private WordDao wordDao;
'๐ปWEB BackEnd > ํ๋ ์์ํฌ Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DI(Dependency Injection) (0) | 2022.11.03 |
---|---|
ํ๋ก์ ํธ ์์ฑ - (๋ฐฉ๋ฒ2)๋ก์ปฌ์์ ์ง์ ์์ฑ (0) | 2022.11.01 |
๊ฐ์ฒด ์์ฑ - (๋ฐฉ๋ฒ2) ์ปจํ ์ด๋๋ฅผ ํตํด ๊ฐ์ฒด ์์ฑ (0) | 2022.11.01 |
๊ฐ์ฒด ์์ฑ - (๋ฐฉ๋ฒ1) new์ฐ์ฐ์๋ฅผ ์ด์ฉ (0) | 2022.11.01 |
์์ฃผ ์ฐ์ด๋ ์ดํด๋ฆฝ์ค ๋จ์ถํค (0) | 2022.11.01 |