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

๐Ÿ’ปStudy/Spring

์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•œ ๊ฐ์ฒด ์ƒ์„ฑ(@Component)

์ด์ „ ํฌ์ŠคํŒ…์„ ํ†ตํ•ด ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด DI๋ฅผ ํ•˜๋Š” ๊ณผ์ •์„ ๊ณต๋ถ€ํ•ด ๋ณด์•˜๋‹ค. (unounou.tistory.com/44?category=1183877)

 

์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•œ DI (@Autowired, @Qualifier)

์ด์ „ ํฌ์ŠคํŒ…์—์„œ ๋นˆ์˜ ์ƒ์„ฑ๊ณผ ์ฃผ์ž…์— ๊ด€๋ จํ•œ ๋ถ€๋ถ„์„ ์†Œ์Šค ์ฝ”๋“œ ์™ธ๋ถ€์ธ xml์œผ๋กœ ๋นผ๋†“์€ ๊ณผ์ •์„ ์‚ดํŽด๋ณด์•˜๋‹ค. ์†Œ์Šค์— ์ˆ˜์ •์‚ฌํ•ญ์ด ์žˆ์„ ๋•Œ ์†Œ์Šค ์ž์ฒด๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ณ  xml์˜ ์„ค์ • ๋ถ€๋ถ„๋งŒ ์ˆ˜์ •

unounou.tistory.com

๋นˆ์„ ์ƒ์„ฑํ•˜๋Š” ๋ถ€๋ถ„์€ xml์— ์žˆ๊ณ  ์ž๋ฐ” ์†Œ์Šค์— @Autowired๋ฅผ ๋ถ™์—ฌ ์ƒ์„ฑ๋œ ๋นˆ์„ ์„ธํŒ…ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋ฒˆ์—๋Š” ๋นˆ ์ƒ์„ฑ ๊ณผ์ • ์—ญ์‹œ ์ž๋ฐ” ์†Œ์Šค์—์„œ ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ์ฒ˜๋ฆฌํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

 

 

GridExamConsole.java

@Component
public class GridExamConsole implements ExamConsole {

	@Autowired(required=false)
	@Qualifier("exam1")
	private Exam exam;
}

 

NewlecExam.java

@Component
public class NewlecExam implements Exam {
	//์ดํ•˜ ์ƒ๋žต
}

 

ํด๋ž˜์Šค์— @Component ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์ž„์œผ๋กœ์จ xml ์—†์ด ๋นˆ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ƒ์„ฑ๋œ ๋นˆ์„ @Autowired๋ฅผ ํ†ตํ•ด ์ฃผ์ž…ํ•˜๊ธฐ ์œ„ํ•ด์„œ xml์— <context:annotation-config/> ํƒœ๊ทธ๋ฅผ ๋ถ™์˜€๋‹ค. ์ด์ฒ˜๋Ÿผ @Component ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด ๋นˆ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋„ xml์— ํƒœ๊ทธ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์•„๋ž˜์ฒ˜๋Ÿผ ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•ด ์ค€๋‹ค.

 

<context:component-scan> ํƒœ๊ทธ๋ฅผ ํ†ตํ•ด @Component ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ ํด๋ž˜์Šค๋ฅผ ์ฝ๊ฒŒ ๋˜๋ฉด, ์ž๋™์œผ๋กœ ๊ทธ ์•ˆ์—์žˆ๋Š” @Autowired ํƒœ๊ทธ๋„ ์ฝ๊ธฐ ๋•Œ๋ฌธ์— <context:annotation-config/> ํƒœ๊ทธ๋Š” ๋”์ด์ƒ ํ•„์š”์น˜ ์•Š์•„ ์ง€์›Œ์ฃผ์—ˆ๋‹ค.

 

 

setting.xml

<context:component-scan base-package="spring.di.ui, spring.di.entity"/>

 

๊ฐ์ฒด์˜ ์ƒ์„ฑ, ์ฃผ์ž… ๋ชจ๋‘ ์–ด๋…ธํ…Œ์ด์…˜์ด ๋Œ€์‹  ํ•˜๊ธฐ ๋•Œ๋ฌธ์— xml์—๋Š” ์ปดํฌ๋„ŒํŠธ ์Šค์บ” ํƒœ๊ทธ๋งŒ ๋‚จ์•„์žˆ๋‹ค. base-package์— ๋ช…์‹œ๋œ ํŒจํ‚ค์ง€์—์„œ @Component ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ ํด๋ž˜์Šค๋ฅผ ์ฐพ์•„ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ผ๋Š” ๋œป์ด๋‹ค. @Component ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ ๋‘ ํด๋ž˜์Šค์˜ ํŒจํ‚ค์ง€๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์‰ผํ‘œ๋กœ ์—ฐ๊ฒฐํ•ด ์ฐพ์•„์•ผ ํ•  ํŒจํ‚ค์ง€๋ฅผ ์ „๋ถ€ ์จ์ฃผ์—ˆ๋‹ค.

 

 

Program.java

public class Program {

	public static void main(String[] args) {
		ApplicationContext context = 
				new ClassPathXmlApplicationContext("spring/di/setting.xml");
		
		Exam exam = context.getBean(Exam.class);
        
		//ExamConsole console = (ExamConsole) context.getBean("console");
		ExamConsole console = context.getBean(ExamConsole.class);

		console.print();
	}
}

 

๊ฐ์ฒด๋ฅผ ๊บผ๋‚ด๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ธ ํด๋ž˜์Šค๋กœ ๊บผ๋‚ด๊ธฐ, ์ด๋ฆ„์œผ๋กœ ๊บผ๋‚ด๊ธฐ ์ค‘์—์„œ ํด๋ž˜์Šค๋กœ ๊บผ๋‚ด๋ณด์•˜๋‹ค. ๋งŒ์•ฝ ์ด๋ฆ„์œผ๋กœ ๊บผ๋‚ด๊ณ  ์‹ถ๋‹ค๋ฉด @Component("console") ์ด๋Ÿฐ ์‹์œผ๋กœ ์ด๋ฆ„ ์˜ต์…˜์„ ์จ์ฃผ๋ฉด ๋œ๋‹ค. ์ด๋ฆ„์œผ๋กœ getBean ํ•  ๋•Œ ์ด๋ฆ„ ์˜ต์…˜ ์—†์ด @Component ์–ด๋…ธํ…Œ์ด์…˜์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

 

* @Value ์–ด๋…ธํ…Œ์ด์…˜

 

NewlecExam.java

@Component
public class NewlecExam implements Exam {
	
	@Value("20")
	private int kor;
	@Value("50")
	private int eng;
	private int math;
	private int com;
}

 

@Value ์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•˜๋ฉด ๊ฐ์ฒด ์ƒ์„ฑ ์‹œ์— ๊ฐ’์„ ์ดˆ๊ธฐํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

* ํŠนํ™”๋œ @Component ์–ด๋…ธํ…Œ์ด์…˜ (@Controller / @Service / @Repository)

 

 

 

Spring MVC ํŒจํ„ด์—์„œ ์‚ฌ์šฉํ•˜๋Š” Controller, Service, Dao์˜ ์—ญํ• ์„ ๋ถ„๋ช…ํ•˜๊ฒŒ ๋ช…์‹œํ•˜๊ธฐ ์œ„ํ•ด์„œ ํŠนํ™”๋œ ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•œ๋‹ค. ์•ž์„œ ์‚ฌ์šฉํ•œ NewlecExam ๊ฐ์ฒด๋Š” Entity์— ์†ํ•œ๋‹ค.

 

 


๋‰ด๋ ‰์ฒ˜ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์ •๋ฆฌํ•œ ๊ฒŒ์‹œ๊ธ€์ž…๋‹ˆ๋‹ค.

www.youtube.com/user/newlec1