• ์ž๋™ ์ฃผ์ž…๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ
  • ์Šคํ”„๋ง์ด ์ง์ ‘ ํด๋ž˜์Šค๋ฅผ ๊ฒ€์ƒ‰ํ•ด์„œ ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ
  • ์„ค์ • ์ฝ”๋“œ๊ฐ€ ํฌ๊ฒŒ ์ค„์–ด๋“ฆ

Component-scan์€ xml์— ์ผ์ผ์ด ๋นˆ๋“ฑ๋ก์„ ํ•˜์ง€์•Š๊ณ  ๊ฐ ๋นˆ ํด๋ž˜์Šค์— @Component๋ฅผ ํ†ตํ•ด ์ž๋™ ๋นˆ ๋“ฑ๋ก์ด ๋œ๋‹ค.

@Component @Controller @Service @Repository์™€ ๊ฐ™์€ ์–ด๋…ธํ…Œ์ด์…˜์„ ์ž๋™ ๋“ฑ๋ก ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค.

 

 

 

@Component ์• ๋…ธํ…Œ์ด์…˜์œผ๋กœ ์Šค์บ” ๋Œ€์ƒ ์ง€์ •

 

 

์Šคํ”„๋ง์ด ๊ฒ€์ƒ‰ํ•ด์„œ ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์œผ๋ ค๋ฉด ํด๋ž˜์Šค์— @Component ์• ๋…ธํ…Œ์ด์…˜์„ ๋ถ™์—ฌ์•ผ ํ•œ๋‹ค.
์ด ์• ๋…ธํ…Œ์ด์…˜์€ ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์Šค์บ” ๋Œ€์ƒ์œผ๋กœ ํ‘œ์‹œํ•œ๋‹ค.

 

  • @Component ์• ๋…ธํ…Œ์ด์…˜์— ๊ฐ’์„ ์ฃผ๋ฉด ๊ทธ ๊ฐ’์„ ๋นˆ ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
    ex. @Component("listPrinter")

 

 


@ComponentScan ์• ๋…ธํ…Œ์ด์…˜์œผ๋กœ ์Šค์บ” ์„ค์ •

 

@Component ์• ๋…ธํ…Œ์ด์…˜์„ ๋ถ™์ธ ํด๋ž˜์Šค๋ฅผ ์Šค์บ”ํ•ด์„œ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•˜๋ ค๋ฉด, ์„ค์ • ํด๋ž˜์Šค์— @ComponentScan ์• ๋…ธํ…Œ์ด์…˜์„ ์ ์šฉํ•ด์•ผํ•œ๋‹ค.

 

 

 

@Configuration
@ComponentScan(basePackages = {"spring"})
public class AppCtx{
    ...
}

 

 

 

์ด ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด AppCtx ํด๋ž˜์Šค์—์„œ

 

@ComponentScan ์• ๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ @Component ์• ๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ ํด๋ž˜์Šค๋ฅผ ๊ฒ€์ƒ‰ํ•ด์„œ ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์„ค์ • ์ฝ”๋“œ๊ฐ€ ํ™•์—ฐํžˆ ์ค„์–ด๋“ ๋‹ค.


๋˜ ์ปดํฌ๋„ŒํŠธ ์Šค์บ” ์• ๋…ธํ…Œ์ด์…˜์„ ์‚ดํŽด๋ณด๋ฉด basePackages ์†์„ฑ๊ฐ’์€ {"spring"}์ด๋‹ค. ์ด ์†์„ฑ์€ ์Šค์บ” ๋Œ€์ƒ ํŒจํ‚ค์ง€ ๋ชฉ๋ก์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
์ด๋Š” spring ํŒจํ‚ค์ง€์™€ ๊ทธ ํ•˜์œ„ ํŒจํ‚ค์ง€์— ์†ํ•œ ํด๋ž˜์Šค๋ฅผ ์Šค์บ” ๋Œ€์ƒ์œผ๋กœ ์„ค์ •ํ•œ๋‹ค. ์Šค์บ” ๋Œ€์ƒ์— ํ•ด๋‹นํ•˜๋Š” ํด๋ž˜์Šค์ค‘ @Component ์• ๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•œ๋‹ค.

 

 


 

 

์Šค์บ” ๋Œ€์ƒ์—์„œ ์ œ์™ธํ•˜๊ฑฐ๋‚˜ ํฌํ•จํ•˜๊ธฐ

 

excludeFilters ์†์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ์Šค์บ”ํ•  ๋•Œ ํŠน์ • ๋Œ€์ƒ์„ ์ž๋™ ๋“ฑ๋ก ๋Œ€์ƒ์—์„œ ์ œ์™ธํ•  ์ˆ˜ ์žˆ๋‹ค.

// ์ •๊ทœ ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•ด์„œ ์ œ์™ธ ๋Œ€์ƒ์„ ์ง€์ •ํ•œ๋‹ค.
// "spring."์œผ๋กœ ์‹œ์ž‘ํ•˜๊ณ  Dao๋กœ ๋๋‚˜๋Š” ์ •๊ทœ ํ‘œํ˜„์‹์„ ์ง€์ •
@ComponentScan(basePackages = {"spring"},
    excludeFilters = @Filter(type = FilterType.REGEX, pattern = "spring\\..*Dao"))





// AspectJ ํŒจํ„ด์„ ์‚ฌ์šฉํ•ด ๋Œ€์ƒ์„ ์ง€์ •ํ•œ๋‹ค.
// spring ํŒจํ‚ค์ง€์˜ Dao๋กœ ๋๋‚˜๋Š” ํƒ€์ž…์„ ์ง€์ •
// AspectJ ํŒจํ„ด์ด ๋™์ž‘ํ•˜๋ ค๋ฉด ์˜์กด ๋Œ€์ƒ์— aspectjweaver๋ชจ๋“ˆ์„ ์ถ”๊ฐ€ํ•ด์•ผํ•œ๋‹ค.
@ComponentScan(basePackages = {"spring"},
        excludeFilters = @Filter(type = FilterType.ASPECTJ, pattern = "spring.*Dao"))





// ํŠน์ • ์• ๋…ธํ…Œ์ด์…˜์„ ๋ถ™์ธ ํƒ€์ž…์„ ์ปดํฌ๋„ŒํŠธ ๋Œ€์ƒ์—์„œ ์ œ์™ธํ•œ๋‹ค.
// ํŒจํ„ด์€ Stringp[] ํƒ€์ž…์ด๋ฏ€๋กœ ๋ฐฐ์—ด์„ ์ด์šฉํ•ด ํŒจํ„ด์„ ํ•œ ๊ฐœ ์ด์ƒ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
@ComponentScan(basePackages = {"spring", "spring2"},
        excludeFilters = @Filter(type = FilterType.Annotation, pattern = {NoProduct.class, ManualBean.class}))





// ํŠน์ • ํƒ€์ž…์ด๋‚˜ ๊ทธ ํ•˜์œ„ ํƒ€์ž…์„ ์ปดํฌ๋„ŒํŠธ ์Šค์บ” ๋Œ€์ƒ์—์„œ ์ œ์™ธํ•œ๋‹ค.
@ComponentScan(basePackages = {"spring"},
        excludeFilters = @Filter(type = FilterType.ASSIGNABLE_TYPE, classes = MemberDao.class))






// ์„ค์ •ํ•  ํ•„ํ„ฐ๊ฐ€ 2๊ฐœ ์ด์ƒ์ด๋ฉด excludeFilters ์†์„ฑ์— ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•ด์„œ ๋ชฉ๋ก์„ ์ „๋‹ฌํ•˜๋ฉด ๋œ๋‹ค.
@ComponentScan(basePackages = {"spring"},
        excludeFilters = {
                @Filter(type = FilterType.ANNOTATION, classes = ManualBean.class),
                @Filter(type = FilterType.REGEX, pattern = "spring2\\..*")
        }

 

 

 

 

 

 

@Component ์• ๋…ธํ…Œ์ด์…˜์„ ๋ถ™์ธ ํด๋ž˜์Šค๋งŒ ์Šค์บ” ๋Œ€์ƒ์— ํฌํ•จ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.

  • @Component
  • @Controller
  • @Service
  • @Repository
  • @Aspect
  • @Configuration

@Aspect๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋‚˜๋จธ์ง€ ์• ๋…ธํ…Œ์ด์…˜์€ @Component ์• ๋…ธํ…Œ์ด์…˜์— ๋Œ€ํ•œ ํŠน์ˆ˜ ์• ๋…ธํ…Œ์ด์…˜์ด๋‹ค.




 

์ปดํฌ๋„ŒํŠธ ์Šค์บ”์— ๋”ฐ๋ฅธ ์ถฉ๋Œ ์ฒ˜๋ฆฌ


์ปดํฌ๋„ŒํŠธ ์Šค์บ” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด์„œ Bean์„ ๋“ฑ๋กํ•  ๊ฒฝ์šฐ, ์•„๋ž˜์™€ ๊ฐ™์€ ๋‘ ๊ฐ€์ง€ ์ถฉ๋Œ์ด ๋ฐœ์ƒ ๊ฐ€๋Šฅ

  1. Bean ์ด๋ฆ„์˜ ์ถฉ๋Œ
  2. ์ˆ˜๋™ ๋“ฑ๋ก์— ๋”ฐ๋ฅธ ์ถฉ๋Œ

2-1. Bean ์ด๋ฆ„ ์ถฉ๋Œ

  • ์„œ๋กœ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€์— ๊ฐ™์€ ํด๋ž˜์Šค์˜ ์ด๋ฆ„์ด ์กด์žฌํ•˜๊ณ , ๋‘ ํด๋ž˜์Šค ๋ชจ๋‘ @Component ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ™๊ฒŒ ๋œ๋‹ค๋ฉด,
    Exception์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋จ
  • ์ด๋Ÿด ๊ฒฝ์šฐ, ๋‘˜ ์ค‘ ํ•˜๋‚˜์— ๋ช…์‹œ์ ์œผ๋กœ Bean ์ด๋ฆ„์„ ์ง€์ •ํ•ด์„œ ์ด๋ฆ„ ์ถฉ๋Œ์„ ํ”ผํ•ด์•ผ ํ•จ

2-2. ์ˆ˜๋™ ๋“ฑ๋ก์— ๋”ฐ๋ฅธ ์ถฉ๋Œ

  1. ๊ฐ™์€ ํด๋ž˜์Šค๋ฅผ ๊ฐ™์€ ์ด๋ฆ„์œผ๋กœ ์„ค์ •ํ•  ๋•Œ:
    • @Component ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด ์ด๋ฏธ ์ง€์ •ํ•œ Bean์˜ ํด๋ž˜์Šค ์ด๋ฆ„์ด ์กด์žฌํ•˜์ง€๋งŒ,
      ํด๋ž˜์Šค ์„ค์ •์— ์ง์ ‘ ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ๋™์ผํ•œ ์ด๋ฆ„์œผ๋กœ ์ •ํ•ด ๋“ฑ๋กํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒ
    • ์ฆ‰, ์Šค์บ”ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” Bean ์ด๋ฆ„๊ณผ ์ˆ˜๋™ ๋“ฑ๋กํ•œ ์ด๋ฆ„์ด ๊ฐ™์„ ๊ฒฝ์šฐ, ์ˆ˜๋™ ๋“ฑ๋กํ•œ Bean์ด ์šฐ์„ ์‹œ ๋จ
  2. ๊ฐ™์€ ํด๋ž˜์Šค๋ฅผ ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ์„ค์ •ํ•  ๋•Œ:
    • ๋งŒ์•ฝ, ์Šค์บ”ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” Bean ์ด๋ฆ„๊ณผ ๋™์ผํ•œ ํด๋ž˜์Šค๋ฅผ ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ์ˆ˜๋™ ๋“ฑ๋กํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š”
      ๋‹ค๋ฅธ ์ด๋ฆ„์˜ ๋‘ ๊ฐœ์˜ Bean์ด ๋งŒ๋“ค์–ด์ง€๊ฒŒ ๋จ
    • ์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” @Qualifier ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด ์•Œ๋งž์€ Bean์„ ์„ ํƒํ•ด์•ผ ํ•จ

 


Reference.

'์ดˆ๋ณด ์›น ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์Šคํ”„๋ง5 ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ž…๋ฌธ' link1

+ Recent posts