- ์๋ ์ฃผ์ ๊ณผ ํจ๊ป ์ฌ์ฉ๋๋ ๊ธฐ๋ฅ
- ์คํ๋ง์ด ์ง์ ํด๋์ค๋ฅผ ๊ฒ์ํด์ ๋น์ผ๋ก ๋ฑ๋กํด์ฃผ๋ ๊ธฐ๋ฅ
- ์ค์ ์ฝ๋๊ฐ ํฌ๊ฒ ์ค์ด๋ฆ
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์ ๋ฑ๋กํ ๊ฒฝ์ฐ, ์๋์ ๊ฐ์ ๋ ๊ฐ์ง ์ถฉ๋์ด ๋ฐ์ ๊ฐ๋ฅ
- Bean ์ด๋ฆ์ ์ถฉ๋
- ์๋ ๋ฑ๋ก์ ๋ฐ๋ฅธ ์ถฉ๋
2-1. Bean ์ด๋ฆ ์ถฉ๋
- ์๋ก ๋ค๋ฅธ ํจํค์ง์ ๊ฐ์ ํด๋์ค์ ์ด๋ฆ์ด ์กด์ฌํ๊ณ , ๋ ํด๋์ค ๋ชจ๋ @Component ์ด๋
ธํ
์ด์
์ด ๋ถ๊ฒ ๋๋ค๋ฉด,
Exception์ด ๋ฐ์ํ๊ฒ ๋จ - ์ด๋ด ๊ฒฝ์ฐ, ๋ ์ค ํ๋์ ๋ช
์์ ์ผ๋ก Bean ์ด๋ฆ์ ์ง์ ํด์ ์ด๋ฆ ์ถฉ๋์ ํผํด์ผ ํจ
2-2. ์๋ ๋ฑ๋ก์ ๋ฐ๋ฅธ ์ถฉ๋
- ๊ฐ์ ํด๋์ค๋ฅผ ๊ฐ์ ์ด๋ฆ์ผ๋ก ์ค์ ํ ๋:
- @Component ์ด๋
ธํ
์ด์
์ ํตํด ์ด๋ฏธ ์ง์ ํ Bean์ ํด๋์ค ์ด๋ฆ์ด ์กด์ฌํ์ง๋ง,
ํด๋์ค ์ค์ ์ ์ง์ ํด๋น ํด๋์ค๋ฅผ ๋์ผํ ์ด๋ฆ์ผ๋ก ์ ํด ๋ฑ๋กํ๋ ๊ฒฝ์ฐ ๋ฐ์ - ์ฆ, ์ค์บํ ๋ ์ฌ์ฉํ๋ Bean ์ด๋ฆ๊ณผ ์๋ ๋ฑ๋กํ ์ด๋ฆ์ด ๊ฐ์ ๊ฒฝ์ฐ, ์๋ ๋ฑ๋กํ Bean์ด ์ฐ์ ์ ๋จ
- @Component ์ด๋
ธํ
์ด์
์ ํตํด ์ด๋ฏธ ์ง์ ํ Bean์ ํด๋์ค ์ด๋ฆ์ด ์กด์ฌํ์ง๋ง,
- ๊ฐ์ ํด๋์ค๋ฅผ ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ์ค์ ํ ๋:
- ๋ง์ฝ, ์ค์บํ ๋ ์ฌ์ฉํ๋ Bean ์ด๋ฆ๊ณผ ๋์ผํ ํด๋์ค๋ฅผ ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ์๋ ๋ฑ๋กํ๋ ๊ฒฝ์ฐ์๋
๋ค๋ฅธ ์ด๋ฆ์ ๋ ๊ฐ์ Bean์ด ๋ง๋ค์ด์ง๊ฒ ๋จ - ์ด๋ฐ ๊ฒฝ์ฐ์๋ @Qualifier ์ด๋ ธํ ์ด์ ์ ํตํด ์๋ง์ Bean์ ์ ํํด์ผ ํจ
- ๋ง์ฝ, ์ค์บํ ๋ ์ฌ์ฉํ๋ Bean ์ด๋ฆ๊ณผ ๋์ผํ ํด๋์ค๋ฅผ ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ์๋ ๋ฑ๋กํ๋ ๊ฒฝ์ฐ์๋
Reference.
'์ด๋ณด ์น ๊ฐ๋ฐ์๋ฅผ ์ํ ์คํ๋ง5 ํ๋ก๊ทธ๋๋ฐ ์ ๋ฌธ' link1
'๐ฅ > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[spring] ๋น ๋ผ์ดํ ์ฌ์ดํด๊ณผ ๋ฒ์ (0) | 2021.08.31 |
---|---|
[Spring] "ํ์ด๋ฆฌ๋จ" ์คํ๋ง ์คํฐ๋ 1์ฐจ (0) | 2021.08.20 |
[Spring] DI์ ์ธ๊ฐ์ง ๋ฐฉ๋ฒ (0) | 2021.08.18 |
[Spring] ์์กด์ฑ ์ฃผ์ (DI)์ด๋ ? (0) | 2021.08.18 |