์ปดํฌ๋ํธ ์ค์บ๊ณผ ์์กด๊ด๊ณ ์๋ ์ฃผ์ ์์ํ๊ธฐ
- ์ง๊ธ๊น์ง ์คํ๋ง ๋น์ ๋ฑ๋กํ ๋๋ @Bean ์ ํตํด ์ค์ ์ ๋ณด์ ์ง์ ๋ฑ๋กํ ๋น์ ๋์ดํ์
- ๋น์ด ์์ญ ์๋ฐฑ๊ฐ๊ฐ ๋๋ฉด ์ผ์ผ์ด ๋ฑ๋กํ๊ธฐ๋ ๊ท์ฐฎ๊ณ ์ค์ ์ ๋ณด๋ ์ปค์ง๊ณ ๋๋ฝ๋๋ ๋ฌธ์ ๋ ๋ฐ์
- ๊ทธ๋์ ์คํ๋ง์ ์ค์ ์ ๋ณด๊ฐ ์์ด๋ ์๋์ผ๋ก ์คํ๋ง ๋น์ ๋ฑ๋กํ๋ ์ปดํฌ๋ํธ ์ค์บ์ด๋ผ๋ ๊ธฐ๋ฅ์ ์ ๊ณต
- ๋ ์์กด๊ด๊ณ๋ ์๋์ผ๋ก ์ฃผ์
ํ๋
@Autowired
๋ผ๋ ๊ธฐ๋ฅ๋ ์ ๊ณต @Component
๊ฐ ๋ถ์ด ์์ผ๋ฉด ์ค์บ ๋์์ด ๋จ
@ComponentScan
@ComponentScan
์@Component
๊ฐ ๋ถ์ ๋ชจ๋ ํด๋์ค๋ฅผ ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋ก- ์ด๋ ์คํ๋ง ๋น์ ๊ธฐ๋ณธ ์ด๋ฆ์ ํด๋์ค๋ช ์ ์ฌ์ฉํ๋ ๋งจ ์๊ธ์๋ง ์๋ฌธ์๋ก ์ฌ์ฉ
@Component
์ ๋ํ ์ด์ ์ด ์์ผ๋ฉด ์คํ๋ง ๋น์ด ์๋ ๋ฑ๋ก๋๋ค.@Controller
@Service
@Repository
๋ด๋ถ์@Component
๋ฅผ ํฌํจํ๊ธฐ์ ๋น์ผ๋ก ์๋ ๋ฑ๋ก๋๋ค.
@Autowired ์์กด๊ด๊ณ ์๋ ์ฃผ์
- ์์ฑ์์
@Autowired
๋ฅผ ์ง์ ํ๋ฉด, ์คํ๋ง ์ปจํ ์ด๋๊ฐ ์๋์ผ๋ก ํด๋น ์คํ๋ง ๋น์ ์ฐพ์์ ์ฃผ์ - ์ด๋ ๊ธฐ๋ณธ ์กฐํ ์ ๋ต์ ํ์ ์ด ๊ฐ์ ๋น์ ์ฐพ์์ ์ฃผ์
ํ์ ์์น์ ๊ธฐ๋ณธ ์ค์บ ๋์
ํ์ํ ํจํค์ง์ ์์ ์์น
@ComponentScan(
basePackages = {"hello.core", "hello.service"},
basePackageClasses = AutoAppConfig.class
)
- ๋ชจ๋ ์๋ฐ ํด๋์ค๋ฅผ ๋ค ์ปดํฌ๋ํธ ์ค์บํ๋ฉด ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆผ ๊ทธ๋์ ๊ผญ ํ์ํ ์์น๋ถํฐ ํ์ํ๋๋ก ์์ ์์น๋ฅผ ์ง์ ํ ์ ์์
basePackages
- ํ์ํ ํจํค์ง์ ์์ ์์น๋ฅผ ์ง์ . ์ด ํจํค์ง ํฌํจ ํ์ ํจํค์ง๋ฅผ ๋ชจ๋ ํ์basePackageClasses
- ์ง์ ํ ํด๋์ค์ ํจํค์ง๋ฅผ ํ์ ์์ ์์น๋ก ์ง์ - ๋ง์ฝ ๋ฏธ์ง์ ์
@ComponentScan
์ด ๋ถ์ ์ค์ ์ ๋ณด ํด๋์ค์ ํจํค์ง๊ฐ ์์ ์์น๊ฐ ๋จ- ๋๋ฌธ์
@SpringBootApplication
์ด ๊ฐ์ฅ ์ต์์ ํจํค์ง์ ์์นํ๋ ๊ฒ
- ๋๋ฌธ์
์ปดํฌ๋ํธ ์ค์บ ๊ธฐ๋ณธ ๋์
์ปดํฌ๋ํธ ์ค์บ์ ์ฉ๋ ๋ฟ ์๋๋ผ ์ด๋ ธํ ์ด์ ์ ๋ฐ๋ฅธ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ํํ๋ค.
@Component
@Controller
- ์คํ๋ง MVC ์ปจํธ๋กค๋ฌ๋ก ์ธ์@Service
- ํน๋ณํ ์ฒ๋ฆฌ x ๋์ ๊ฐ๋ฐ์๋ค์ด ๋น์ฆ๋์ค ๋ก์ง์ด ๋ค์ด๊ฐ๋ ๊ณณ์ผ๋ก ์ธ์@Repository
- ์คํ๋ง ๋ฐ์ดํฐ ์ ๊ทผ ๊ณ์ธต์ผ๋ก ์ธ์ํ๊ณ , ๋ฐ์ดํฐ ๊ณ์ธต์ ์์ธ๋ฅผ ์คํ๋ง ์์ธ๋ก ๋ณํ@Configuration
- ์คํ๋ง ๋น์ด ์ฑ๊ธํค์ ์ ์งํ๋๋ก ์ถ๊ฐ ์ฒ๋ฆฌ
ํํฐ
@ComponentScan(
includeFilters = @Filter(type = FilterType.ANNOTATION, classes = MyIncludeComponent.class),
excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = MyExcludeComponent.class)
)
includeFilters
์MyIncludeComponent
์ด๋ ธํ ์ด์ ์ ์ถ๊ฐํด์BeanA
๊ฐ ๋ฑ๋ก๋จexcludeFilters
์MyExcludeComponent
์ด๋ ธํ ์ด์ ์ ์ถ๊ฐํด์BeanB
๊ฐ ๋ฑ๋ก๋์ง ์์
FilterType ์ต์
ANNOTATION
- ๊ธฐ๋ณธ๊ฐASSIGNABLE_TYPE
- ์ง์ ํ ํ์ ๊ณผ ์์ ํ์ ์ ์ธ์ASPECTJ
- AspectJ ํจํด ์ฌ์ฉREGEX
- ์ ๊ท ํํ์CUSTOM
-TypeFilter
๋ผ๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด์ ์ฒ๋ฆฌ
์ค๋ณต ๋ฑ๋ก๊ณผ ์ถฉ๋
์ปดํฌ๋ํธ ์ค์บ์์ ๊ฐ์ ๋น ์ด๋ฆ์ ๋ฑ๋กํ๋ค๋ฉด?
- ์๋ ๋น ๋ฑ๋ก vs ์๋ ๋น ๋ฑ๋ก
- ์๋ ๋น ๋ฑ๋ก vs ์๋ ๋น ๋ฑ๋ก
์๋ ๋น ๋ฑ๋ก vs ์๋ ๋น ๋ฑ๋ก
- ์ปดํฌ๋ํธ ์ค์บ์ ์ํด ์๋์ผ๋ก ์คํ๋ง ๋น์ด ๋ฑ๋ก๋๋๋ฐ, ์ด๋ฆ์ด ๊ฐ์ ๊ฒฝ์ฐ ์คํ๋ง์ ์์ธ๋ฅผ ๋ฐ์์ํด
ConflictingBeanDefinitionException
๋ฐ์
์๋ ๋น ๋ฑ๋ก vs ์๋ ๋น ๋ฑ๋ก
- Spring Framework ์์ ์๋ ๋ฑ๋ก ๋น์ด ์ฐ์ ๊ถ์ ๊ฐ์ง ์๋ ๋น์ด ์๋ ๋น์ ์ค๋ฒ๋ผ์ด๋ฉํจ
- ๊ทผ๋ฐ Spring Boot ์์ ์์ธ๋ฅผ ๋ฐ์์์ผ๋ฒ๋ฆผ