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

@Qualifier 처럼 @Component μ–΄λ…Έν…Œμ΄μ…˜μ˜ 인자둜 빈의 이름을 μ„€μ •ν•  수 μžˆλ‹€.

μ˜΅μ…˜

μŠ€μΊ” λŒ€μƒ μ§€μ •

  • basePackages μ˜΅μ…˜μ„ 톡해 μŠ€μΊ”ν•  νŒ¨ν‚€μ§€λ₯Ό μ§€μ •ν•  수 μžˆλ‹€.

  • excludeFilters μ˜΅μ…˜μ„ 톡해 μŠ€μΊ”μ—μ„œ μ œμ™Έν•  클래슀λ₯Ό μ§€μ •ν•  수 μžˆλ‹€.

    • μ œμ™Έν•  νƒ€μž…μœΌλ‘œ μ •κ·œμ‹, AspectJ νŒ¨ν„΄, μ–΄λ…Έν…Œμ΄μ…˜ 등을 μ‚¬μš©ν•  수 μžˆλ‹€.

좩돌 처리

μ»΄ν¬λ„ŒνŠΈ μŠ€μΊλ‹ κ³Όμ •μ—μ„œ λ™μΌν•œ 이름을 κ°€μ§„ 빈이 μ—¬λŸ¬ 개 μ‘΄μž¬ν•˜κ±°λ‚˜, @Component μ–΄λ…Έν…Œμ΄μ…˜μ„ μ μš©ν•œ 클래슀λ₯Ό @Configuration λ‚΄μ—μ„œ λ‹€μ‹œ @Bean으둜 μ§€μ •ν•˜κ±°λ‚˜ ν•˜λ©΄ 빈 등둝 좩돌이 λ°œμƒν•  수 μžˆλ‹€. 이λ₯Ό μœ μ˜ν•˜μ—¬ λΉˆμ„ λ“±λ‘ν•˜μ—¬μ•Ό ν•œλ‹€.

Last updated