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