[Spring] ์์กด์ฑ ์ฃผ์ ์ ๋ ธํ ์ด์ ์ ๋ฆฌ - @Autowired, @Resource, @Inject
1. @Autowired
@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;
}
}
4) @Qualifier ์ ๋ ธํ ์ด์
XML ์ค์ ํ์ผ
<bean id="wordDao1" class="com.word.dao.WordDao" >
<qualifier value="usedDao"/>
</bean>
<bean id="wordDao2" class="com.word.dao.WordDao" />
<bean id="wordDao3" class="com.word.dao.WordDao" />
์์ ๊ฐ์ด ๋์ผํ ํ์ ์ ๋น ๊ฐ์ฒด๊ฐ ์ฌ๋ฌ๊ฐ ์ ์๋์ด ์์ ๊ฒฝ์ฐ ์ฐ์ ์ ์ผ๋ก ์ฌ์ฉํ ๋น ๊ฐ์ฒด์ <bean> ํ๊ทธ ํ์์ <qualifier> ํ๊ทธ๋ฅผ ์ค์ ํ๋ค.
์๋ฐ ์ฝ๋
public class WordRegisterServiceUseAutowired {
@Autowired
@Qualifier("usedDao")
private WordDao wordDao;
public WordRegisterServiceUseAutowired() { }
}
๊ทธ๋ฆฌ๊ณ ์๋ฐ ์ฝ๋์์๋ @Autowired์ ํจ๊ป @Qualifier๋ฅผ ์ฌ์ฉํด์ @Qualifier์ XML ์ค์ ํ์ผ์์ ์ค์ ํ <qualifier> ํ๊ทธ์ value ๊ฐ์ ์ง์ ํด์ค๋ค.
์ด๋ ๊ฒ ํ๋ฉด ๋์ผํ ํ์ ์ ๋น์ด ์ฌ๋ฌ ๊ฐ์ผ ๊ฒฝ์ฐ ์ฐ์ ์ ์ผ๋ก ํน์ ๋น์ด ์ฃผ์ ๋๋ค.
2. @Resource
@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;
}
}
3. @Inject
@Inject๋ @Autowired์ ์ ์ฌํ๊ฒ ์ฃผ์ ํ๋ ค๊ณ ํ๋ ๊ฐ์ฒด์ ํ์ ์ด ์ผ์นํ๋ ๊ฐ์ฒด๋ฅผ ์๋์ผ๋ก ์ฃผ์ ํ๋ค.
@Resource๋ Java ์ ๊ณต ์ ๋ ธํ ์ด์ ์ด๋ฉฐ ํ๋, ์์ฑ์, Setter์ ๋ถ์ผ ์ ์๋ค.
@Autowired์ ๋ง์ฐฌ๊ฐ์ง๋ก ํ๋, Setter์ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ฐ๋์ ๊ธฐ๋ณธ ์์ฑ์๊ฐ ์ ์๋์ด ์์ด์ผ ํ๋ค.
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;
}
}
5) @Named ์ ๋ ธํ ์ด์
@Autowired์ @Qualifier์ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด @Inject์์๋ @Named์ด๋ค.
@Qualifier์ ๋ฌ๋ฆฌ @Named์๋ ๋น ์ด๋ฆ(id)๋ฅผ ์ง์ ํ๋ฏ๋ก @Autowired, @Qualifier๋ฅผ ์ฌ์ฉํ ๋์ ๋นํด XML ์ค์ ํ์ผ์ด ๋ค์ ์งง์์ง๋ค๋ ํน์ง์ด ์๋ค.
XML ์ค์ ํ์ผ
<bean id="wordDao1" class="com.word.dao.WordDao"/>
<bean id="wordDao2" class="com.word.dao.WordDao"/>
<bean id="wordDao3" class="com.word.dao.WordDao"/>
<Qualifier> ํ๊ทธ๊ฐ ํ์ํ @Qualifier์ ๋ฌ๋ฆฌ @Named๋ XML ์ค์ ํ์ผ์ ์ถ๊ฐ์ ์ผ๋ก ์ค์ ํ ๊ฒ์ด ์๋ค.
์๋ฐ ์ฝ๋
import javax.inject.Inject;
import javax.inject.Named;
public class WordRegisterServiceUseInject {
@Inject
@Named("wordDao1")
private WordDao wordDao;
public WordRegisterServiceUseInject() {
}
}
@Named์ ๋น ์ด๋ฆ(id)๋ฅผ ์ง์ ํ๋ค.
๋๊ธ