๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ปWEB BackEnd/ํ”„๋ ˆ์ž„์›Œํฌ Spring

์˜์กด ๊ฐ์ฒด ์ž๋™ ์ฃผ์ž…

๋ชฉ์ฐจ

  • ์˜์กด ๊ฐ์ฒด ์ž๋™ ์ฃผ์ž…
  • @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;