๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Spring-study๐ŸŒฑ/Spring-Basic

Section 6-3. ํ•„ํ„ฐ

by ๊ธฐ๋ฉฐ๋ˆ… 2022. 4. 26.

๋ชจ๋“  ์ฝ”๋“œ๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์— ์ถ”๊ฐ€

includeFilters : ์ปดํฌ๋„ŒํŠธ ์Šค์บ” ๋Œ€์ƒ์„ ์ถ”๊ฐ€๋กœ ์ง€์ •

excludeFilters : ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์—์„œ ์ œ์™ธํ•  ๋Œ€์ƒ์„ ์ง€์ •

 

  • ์ปดํฌ๋„ŒํŠธ ์Šค์บ” ๋Œ€์ƒ์— ์ถ”๊ฐ€ํ•  ์• ๋…ธํ…Œ์ด์…˜

  • ์ปดํฌ๋„ŒํŠธ ์Šค์บ” ๋Œ€์ƒ์—์„œ ์ œ์™ธํ•  ์• ๋…ธํ…Œ์ด์…˜

ํด๋ž˜์Šค ํƒ€์ž…์— ๋ถ™๋Š” ์• ๋…ธํ…Œ์ด์…˜์ด๋ผ๋Š” ์˜๋ฏธ๋กœ,

@MyIncludeComponent๊ฐ€ ๋ถ™์œผ๋ฉด ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์— ์ถ”๊ฐ€,

@MyExcludeComponent๊ฐ€ ๋ถ™์œผ๋ฉด ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์—์„œ ์ œ์™ธํ•˜๋„๋ก ๋งŒ๋“ค๊ณ ์ž ํ•œ๋‹ค.


์ปดํฌ๋„ŒํŠธ ๋Œ€์ƒ์œผ๋กœ ์ถ”๊ฐ€ ๋ฐ ์ œ์™ธํ•  ํด๋ž˜์Šค ์ƒ์„ฑ

  • ์ปดํฌ๋„ŒํŠธ ๋Œ€์ƒ์œผ๋กœ ์ถ”๊ฐ€ํ•  BeanA

@MyIncludeComponent ์ ์šฉ

  • ์ปดํฌ๋„ŒํŠธ ๋Œ€์ƒ์—์„œ ์ œ์™ธํ•  BeanB

@MyExcludeComponent ์ ์šฉ


Config์„ค์ • ํด๋ž˜์Šค์—์„œ Filter๋ฅผ ๋งŒ๋“ค์–ด Testํ•˜๊ธฐ

includeFilters๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Filterํƒ€์ž…์€ ANNOTATION์œผ๋กœ ํ•˜์—ฌ, MyIncludeComponent ์• ๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ ํด๋ž˜์Šค๋“ค์€ ์ปดํฌ๋„ŒํŠธ ๋Œ€์ƒ์— ์ถ”๊ฐ€ํ•˜๋„๋ก ์„ค์ •ํ•œ๋‹ค.

excludeFilters๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Filterํƒ€์ž…์€ ANNOTATION์œผ๋กœ ํ•˜์—ฌ, MyExcludeComponent ์• ๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ ํด๋ž˜์Šค๋“ค์€ ์ปดํฌ๋„ŒํŠธ ๋Œ€์ƒ์—์„œ ์ œ์™ธํ•˜๋„๋ก ์„ค์ •ํ•œ๋‹ค.

 

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œํ‚ค๋ฉด, ์ปดํฌ๋„ŒํŠธ ์Šค์บ” ๋Œ€์ƒ์ธ beanA๋ฅผ ์กฐํšŒํ•˜๊ณ  ์ด๋Š” MyIncludeComponent ์• ๋…ธํ…Œ์ด์…˜์ด ๋ถ™์–ด์žˆ๊ธฐ์— ๋นˆ์œผ๋กœ ๋“ฑ๋ก๋œ๋‹ค. ๋”ฐ๋ผ์„œ Null์ด ์•„๋‹ˆ๋ฏ€๋กœ ํ…Œ์ŠคํŠธ๊ฐ€ ๋ฌธ์ œ์—†์ด ์„ฑ๊ณตํ•  ๊ฒƒ์ด๋‹ค.

 

์šฐ๋ฆฌ๊ฐ€ ์ œ์™ธ์‹œํ‚จ beanB๋ฅผ ์กฐํšŒํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

beanB๋ผ๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋นˆ์€ ์—†๋‹ค๋Š” NoSuchBeanDefinitionException์ด ๋ฐœ์ƒํ•œ๋‹ค.

 

ํ…Œ์ŠคํŠธ๋ฅผ ์„ฑ๊ณต์‹œํ‚ค๊ธฐ ์œ„ํ•ด assertThrows๋ฅผ ํ†ตํ•ด ์˜ˆ์™ธ์ฒ˜๋ฆฌ ํ•˜์—ฌ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•ด๋ณด๋ฉด

ํ…Œ์ŠคํŠธ ์„ฑ๊ณต


FilterType ์˜ต์…˜

1. ANNOTATION : ๊ธฐ๋ณธ๊ฐ’, ์• ๋…ธํ…Œ์ด์…˜์„ ์ธ์‹ํ•ด์„œ ๋™์ž‘

  • ex) org.example.SomeAnnotation

2. ASSIGNABLE_TYPE : ์ง€์ •ํ•œ ํƒ€์ž…๊ณผ ์ž์‹ ํƒ€์ž…์„ ์ธ์‹ํ•ด์„œ ๋™์ž‘

  • ex) org.example.SomeClass

3. ASPECTJ : AspectJ ํŒจํ„ด ์‚ฌ์šฉ

  • ex) org.example..*Service+

4. REGEX : ์ •๊ทœ ํ‘œํ˜„์‹

  • ex) org\.example\.Default.*

5. CUSTOM : TypeFilter ๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ด์„œ ์ฒ˜๋ฆฌ

  • ex) org.example.MyTypeFilter

 

์˜ˆ๋ฅผ ๋“ค์–ด์„œ BeanA๋„ ์ œ์™ธํ•˜๊ณ  ์‹ถ์œผ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.

ASSIGNABLE_TYPE์„ ์‚ฌ์šฉํ•˜์—ฌ ์ง์ ‘ ํด๋ž˜์Šค๋ฅผ ์ง€์ •ํ•œ๋‹ค.

 

@Component๋ฉด ์ถฉ๋ถ„ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, includeFilter๋ฅผ ์‚ฌ์šฉํ•  ์ผ์€ ๊ฑฐ์˜ ์—†๋‹ค. excludeFilters๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ด์œ ๋กœ ๊ฐ„ํ˜น ์‚ฌ์šฉํ•  ๋•Œ๊ฐ€ ์žˆ์ง€๋งŒ ๋งŽ์ง€๋Š” ์•Š๋‹ค.

ํŠนํžˆ ์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ์ตœ๊ทผ ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์„ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•˜๋Š”๋ฐ, ์˜ต์…˜์„ ๋ณ€๊ฒฝํ•˜๋ฉด์„œ ์‚ฌ์šฉํ•˜๊ธฐ ๋ณด๋‹ค๋Š” ์Šคํ”„๋ง์˜ default์„ค์ •์— ์ตœ๋Œ€ํ•œ ๋งž์ถ”์–ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.