Configuration

์ •์˜

Spring์—์„œ Bean ๋“ฑ๋ก ๋“ฑ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์„ค์ • ํŒŒ์ผ์„ ์„ ์–ธํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜

๊ธฐ์กด์— xml๋กœ ๊ด€๋ฆฌํ•˜๋˜ ๊ฒƒ์„ ๋” ์šฉ์ดํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด Annotation ๊ธฐ๋ฐ˜์˜ ๊ด€๋ฆฌ ๋ฐฉ์‹์ด ๋“ฑ์žฅํ–ˆ๋‹ค.

๋‹ค์Œ์˜ ๋‘ ๊ฐ€์ง€ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  • ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ์ปค์Šคํ…€ ๋นˆ์„ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ํ•ด๋‹น ์ปค์Šคํ…€ ๋นˆ๋“ค์„ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ๊ด€๋ฆฌ๋˜๋„๋ก ํ•œ๋‹ค.

  • Configuration ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ช…์‹œ๋œ ํ•ด๋‹น ํด๋ž˜์Šค ๋˜ํ•œ ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋œ๋‹ค.

    • @Configuration ์–ด๋…ธํ…Œ์ด์…˜์— @Component ์–ด๋…ธํ…Œ์ด์…˜์ด ํฌํ•จ๋˜๊ธฐ ๋•Œ๋ฌธ

๋‹จ์ˆœํžˆ @Bean ์–ด๋…ธํ…Œ์ด์…˜๋งŒ ์‚ฌ์šฉํ•ด๋„ IoC ์ปจํ…Œ์ด๋„ˆ์— Bean์œผ๋กœ ๋“ฑ๋ก๋˜๋Š” ๊ฒƒ์€ ๋งž์œผ๋‚˜, ์ด Bean์„ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด @Configuration ์–ด๋…ธํ…Œ์ด์…˜์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•œ๋‹ค.

์‚ฌ์šฉ๋ฒ•

// Bean์œผ๋กœ ๋“ฑ๋กํ•˜๊ณ ์ž ํ•˜๋Š” ํด๋ž˜์Šค ๊ตฌํ˜„

public class Person {
	
	private String name;
	private String age;

	...

}
// Config Class๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ๋‚ด๋ถ€์— Bean์„ ์„ ์–ธ
// @Configuration ์–ด๋…ธํ…Œ์ด์…˜์— ์˜ํ•ด ํ•ด๋‹น Bean์€ Singleton์œผ๋กœ ๊ด€๋ฆฌ๋จ

@Configuration
public class MyConfig {

	...
	
	@Bean
	public Person person() {
		return new Person();
	}
	
}

์›๋ฆฌ

  • Configuration์„ ๋ช…์‹œํ•˜์ง€ ์•Š๊ณ  Bean์„ ๋“ฑ๋กํ•˜๋ฉด Bean์ด ์„ ์–ธ๋œ ํด๋ž˜์Šค(MyConfig) ๊ทธ ์ž์ฒด๋ฅผ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•œ๋‹ค.

  • Configuration์„ ๋ช…์‹œํ•˜๊ณ  ๋“ฑ๋กํ•˜๋ฉด MyConfig๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ Spring์ด ๋ฏธ๋ฆฌ ์ •์˜ํ•ด ๋‘” ์ž„์˜์˜ ํด๋ž˜์Šค๊ฐ€ MyConfig๋ฅผ ์ƒ์†๋ฐ›๋„๋ก ํ•œ ๋’ค ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•œ๋‹ค. ์ด ์ž„์˜ ํด๋ž˜์Šค์—๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ์‹ฑ๊ธ€ํ†ค ์œ ์ง€๋ฅผ ์œ„ํ•œ ๋กœ์ง์ด ์กด์žฌํ•œ๋‹ค.

์‹ฑ๊ธ€ํ†ค ์œ ์ง€๋ฅผ ์œ„ํ•œ ๋กœ์ง?

MyConfig๋ฅผ ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค๋Š” CGLIB ํด๋ž˜์Šค๋ผ๊ณ  ํ•˜๋ฉฐ, ์ด ํด๋ž˜์Šค๋Š” ๊ฐ๊ฐ์˜ ๋นˆ ์ƒ์„ฑ ๋ฉ”์†Œ๋“œ์—์„œ ๋‚ด๋ถ€์ ์œผ๋กœ ํ”„๋ก์‹œ ํŒจํ„ด์„ ์ด์šฉํ•˜์—ฌ ํ•ด๋‹น ๋นˆ์ด ์—†์„ ๋•Œ์—๋งŒ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์žˆ์„ ๋•Œ์—๋Š” ์ƒ์„ฑ๋œ ๋นˆ์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•˜๋Š” ๋กœ์ง์„ ์ถ”๊ฐ€ํ•œ๋‹ค. ์ด๋Š” proxyBeanMethods ์˜ต์…˜ ๊ฐ’์„ false๋กœ ์ฃผ์–ด ํ•ด์ œํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ๊ฒฝ์šฐ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ๊ด€๋ฆฌ๋˜์ง€ ์•Š๊ณ  getBean์„ ํ†ตํ•œ ๋นˆ ํ˜ธ์ถœ ์‹œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๋นˆ์ด ์ƒ์„ฑ๋œ๋‹ค.

์ถœ์ฒ˜

https://castleone.tistory.com/2

https://mangkyu.tistory.com/234

Last updated