๐Ÿ’ปStudy/Spring

XML Configuration์„ Java Configuration์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ

์œผ๋…ธ๋‹ˆ 2021. 2. 13. 11:56

ํ”„๋กœ๊ทธ๋žจ์— ์ˆ˜์ •์‚ฌํ•ญ์ด ์ƒ๊ฒผ์„ ๋•Œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ-์ฃผ์ž…ํ•˜๋Š” ์„ค์ • ๋ถ€๋ถ„์„ ์†Œ์Šค ์ฝ”๋“œ์˜ ์™ธ๋ถ€์ธ xml์œผ๋กœ ๋นผ๋‘๋Š” ๊ฒƒ์ด ์œ ์ง€ ๋ณด์ˆ˜์— ํŽธ๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ์—๋Š” ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์ด ๋„๋ฆฌ ์“ฐ์˜€๋‹ค. ํ•˜์ง€๋งŒ ๊ฐœ๋ฐœ์ž๋“ค์€ ๊ทธ ๋ฐฉ๋ฒ•๋งˆ์ €๋„ xml์„ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์žˆ๋‹ค๋Š” ํŒ๋‹จ์„ ํ–ˆ๊ณ  ๊ทธ ๊ฒฐ๊ณผ ์š”์ฆ˜์—๋Š” ์ž๋ฐ” ์ฝ”๋“œ ์ž์ฒด์— ์–ด๋…ธํ…Œ์ด์…˜์„ ๋‹ฌ์•„์ฃผ๋Š” ๋ฐฉ๋ฒ•์ด ๋” ๋งŽ์ด ์“ฐ์ด๊ณ  ์žˆ๋‹ค. ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์— ์žฅ๋‹จ์ ์ด ์žˆ์œผ๋‹ˆ ํ•„์š”์— ๋งž๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ๋‹ค๋งŒ ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐฉ์‹์„ ํ†ต์ผํ•ด์ฃผ๋Š” ํŽธ์ด ์ข‹๋‹ค.

 

์•ž์„œ ์ž‘์„ฑํ•œ ํฌ์ŠคํŒ…์—์„œ๋Š” ์Šคํ”„๋ง ์—†์ด DI, xml ์„ค์ • ํŒŒ์ผ ์ถ”๊ฐ€, xml์„ ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ๋ฐ”๊พธ๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋‘ ์‚ดํŽด๋ณด์•˜๋‹ค. ์ด์ œ๋ถ€ํ„ฐ๋Š” xml์„ ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ๋ฐ”๊พธ๋Š” ๋ฐฉ์‹์„ ๋งˆ๋ฌด๋ฆฌ ์ง€์–ด๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

 

 

 

๊ฐ์ฒด์˜ ์ƒ์„ฑ์€ @Component ์–ด๋…ธํ…Œ์ด์…˜์ด, ์ฃผ์ž…(์กฐ๋ฆฝ)์€ @Autowired ์–ด๋…ธํ…Œ์ด์…˜์ด ํ•จ์œผ๋กœ์จ ํ˜„์žฌ xml ํŒŒ์ผ์—๋Š” <context:component-scan base-package="spring.di.ui"/> ํƒœ๊ทธ๋งŒ ๋‚จ์•„์žˆ๋Š” ์ƒํƒœ์ด๋‹ค. ์ด ํƒœ๊ทธ๋Š” ์Šคํ”„๋ง์—๊ฒŒ ํ•ด๋‹น ํŒจํ‚ค์ง€(base-package)์—์„œ @Component ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ ๊ฐ์ฒด๋ฅผ ์ฐพ์•„ ์ƒ์„ฑํ•˜๋ผ๋Š” ๋ช…๋ น์ด๋‹ค. ์ด์ œ xml ๋งˆ์ €๋„ ์ž๋ฐ” ํŒŒ์ผ์ด ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๊ฒŒ, ์ฆ‰ ์ž๋ฐ” ํŒŒ์ผ์—์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋„๋ก ํ•˜๊ฒ ๋‹ค.

 

์„ค์ • ํŒŒ์ผ์ด ๋  ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ ์ผ๋ฐ˜์ ์œผ๋กœ ํด๋ž˜์Šค ์ด๋ฆ„ ๋์— Config๋ฅผ ๋ถ™์—ฌ ์„ค์ • ํŒŒ์ผ์„ ๋Œ€์‹ ํ•จ์„ ๋ช…์‹œํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์†Œ์Šค์— @Configuration ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์ธ๋‹ค. ์ด์ œ ์ด Config ํŒŒ์ผ์ด xml์„ ๋Œ€์‹ ํ•ด ์Šคํ”„๋ง์˜ ๊ฐ์ฒด ์ƒ์„ฑ-์กฐ๋ฆฝ ์ง€์‹œ์„œ ์—ญํ• ์„ ํ•  ๊ฒƒ์ด๋‹ค. component-scan ํƒœ๊ทธ๋ฅผ ๋Œ€์‹ ํ•ด @ComponentScan ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์—ฌ์ฃผ๊ณ , ํŒจํ‚ค์ง€๊ฐ€ ๋‘ ๊ฐœ ์ด์ƒ์ด๋ผ๋ฉด ๋ฌธ์ž์—ด ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ๋‚˜์—ดํ•ด ์ฃผ๋ฉด ๋œ๋‹ค.

(ex. @ComponentScan("spring.di.ui", "spring.di.entity")

 

๋นˆ์„ ์ƒ์„ฑํ•˜๋Š” <bean> ํƒœ๊ทธ๋Š” @Bean ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ๋Œ€์ฒด๋œ๋‹ค. @Bean ์–ด๋…ธํ…Œ์ด์…˜์€ ์ƒ์„ฑํ•œ ๊ฐ์ฒด๋ฅผ IoC ์ปจํ…Œ์ด๋„ˆ์— ๋‹ด๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. new ์ƒ์„ฑ์ž๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์„œ ๋ฆฌํ„ดํ•ด ์ฃผ๋Š” ๋ฐฉ์‹์ฒ˜๋Ÿผ ์จ์ฃผ๊ณ , ๋ฉ”์†Œ๋“œ์˜ ์ด๋ฆ„์ธ exam์€ ๋นˆ์˜ ์ด๋ฆ„์ฒ˜๋Ÿผ ๋ช…์‚ฌํ˜•์ด ๋ถ™์—ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฉ”์†Œ๋“œ์˜ ์ด๋ฆ„์€ getExam()์ฒ˜๋Ÿผ ๋™์‚ฌํ˜•์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์— ๋ฐ˜ํ•ด exam()์ด๋ผ๋Š” ๋ช…์‚ฌํ˜• ์ด๋ฆ„์ด ๋ถ™์€ ๊ฒƒ์ด ์ƒ์†Œํ•˜์ง€๋งŒ bean id="exam"๊ณผ ๊ฐ™์€ ์˜๋ฏธ๋กœ IoC ์ปจํ…Œ์ด๋„ˆ์— ์ด ์ด๋ฆ„์œผ๋กœ ๋‹ด๊ฒจ์„œ ์‚ฌ์šฉ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

 

setting.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	......>
	<context:component-scan base-package="spring.di.ui"/>
    <bean id="exam" class="spring.di.entity.NewlecExam"/> 
</beans>

 

์œ„์˜ xml ์„ค์ • ํŒŒ์ผ์ด 

 

NewlecDIConfig.java

@ComponentScan("spring.di.ui")
@Configuration
public class NewlecDIConfig {
	
	@Bean
	public Exam exam() {
		return new NewlecExam();
	}
}

 

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž๋ฐ” ํŒŒ์ผ๋กœ ์™„์ „ํžˆ ๋Œ€์ฒด๋˜์—ˆ๋‹ค.

 

 

 

 

ApplicationContext ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„์ฒด์ธ ClassPathXmlApplicationContext, FileSystemXmlApplicationContext, XmlWebApplicationContext์€ ๋ชจ๋‘ xml ์„ค์ • ํŒŒ์ผ๊ณผ ๊ด€๋ จ์ด ์žˆ๋‹ค. ์ด์ œ xml ํŒŒ์ผ์ด ์•„๋‹Œ ์ž๋ฐ”์˜ Config ํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋ฏ€๋กœ AnnotationConfigApplicaionContext๋กœ ์ˆ˜์ •ํ•˜๋„๋ก ํ•œ๋‹ค.

 

Program.java

public class Program {

	public static void main(String[] args) {
		ApplicationContext context = 
				//new ClassPathXmlApplicationContext("spring/di/setting.xml");
				new AnnotationConfigApplicationContext(NewlecDIConfig.class);
	}
}

 

 

์—ฌ๊ธฐ๊นŒ์ง€ Spring DI ๋!

 

 


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

www.youtube.com/user/newlec1