Component Scan

์ •์˜

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Repeatable(ComponentScans.class)
public @interface ComponentScan {

	...

}
  • Component Scan(์ปดํฌ๋„ŒํŠธ ์Šค์บ”)์€ Bean์œผ๋กœ ๋“ฑ๋กํ•  Component๋ฅผ ์ฐพ๋Š” ๋™์ž‘์„ ๋งํ•œ๋‹ค.

  • @ComponentScan ์–ด๋…ธํ…Œ์ด์…˜์€ @Component ์–ด๋…ธํ…Œ์ด์…˜๊ณผ ๋‚ด๋ถ€์ ์œผ๋กœ @Component ์–ด๋…ธํ…Œ์ด์…˜์„ ํฌํ•จํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜(@Controller, @Service, Repository ๋“ฑ)์ด ์‚ฌ์šฉ๋œ ํด๋ž˜์Šค๋ฅผ ์ฐพ์•„ Bean์œผ๋กœ ๋“ฑ๋กํ•œ๋‹ค.

  • ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์„ ํ†ตํ•ด ๋นˆ์„ ๋“ฑ๋กํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” @Configuration ์–ด๋…ธํ…Œ์ด์…˜์ด ์„ ์–ธ๋œ ์„ค์ • ํŒŒ์ผ์— @ComponentScan ์–ด๋…ธํ…Œ์ด์…˜์„ ์ ์šฉํ•ด์•ผ ํ•œ๋‹ค.

๋นˆ์˜ ์ด๋ฆ„ ์ง€์ • ๋ฐฉ์‹

Default

@Component
public class MyClass {

}

๋นˆ์˜ ์ด๋ฆ„์„ ๋ณ„๋„๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ํด๋ž˜์Šค์˜ ์ด๋ฆ„ ์ฒซ ๊ธ€์ž๋ฅผ ์†Œ๋ฌธ์ž๋กœ ๋ฐ”๊พผ ์ด๋ฆ„์ด ๋นˆ ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. (์œ„์˜ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ๋œ ๋นˆ์˜ ์ด๋ฆ„์€ myClass๊ฐ€ ๋œ๋‹ค.)

Custom

@Component("customName")
public class MyClass {

}

@Qualifier ์ฒ˜๋Ÿผ @Component ์–ด๋…ธํ…Œ์ด์…˜์˜ ์ธ์ž๋กœ ๋นˆ์˜ ์ด๋ฆ„์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ต์…˜

์Šค์บ” ๋Œ€์ƒ ์ง€์ •

  • basePackages ์˜ต์…˜์„ ํ†ตํ•ด ์Šค์บ”ํ•  ํŒจํ‚ค์ง€๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • excludeFilters ์˜ต์…˜์„ ํ†ตํ•ด ์Šค์บ”์—์„œ ์ œ์™ธํ•  ํด๋ž˜์Šค๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

    • ์ œ์™ธํ•  ํƒ€์ž…์œผ๋กœ ์ •๊ทœ์‹, AspectJ ํŒจํ„ด, ์–ด๋…ธํ…Œ์ด์…˜ ๋“ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ถฉ๋Œ ์ฒ˜๋ฆฌ

์ปดํฌ๋„ŒํŠธ ์Šค์บ๋‹ ๊ณผ์ •์—์„œ ๋™์ผํ•œ ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋นˆ์ด ์—ฌ๋Ÿฌ ๊ฐœ ์กด์žฌํ•˜๊ฑฐ๋‚˜, @Component ์–ด๋…ธํ…Œ์ด์…˜์„ ์ ์šฉํ•œ ํด๋ž˜์Šค๋ฅผ @Configuration ๋‚ด์—์„œ ๋‹ค์‹œ @Bean์œผ๋กœ ์ง€์ •ํ•˜๊ฑฐ๋‚˜ ํ•˜๋ฉด ๋นˆ ๋“ฑ๋ก ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ์œ ์˜ํ•˜์—ฌ ๋นˆ์„ ๋“ฑ๋กํ•˜์—ฌ์•ผ ํ•œ๋‹ค.

Last updated