@Component
는 스프링 컨테이너가 자동적으로 사용자가 작성한 bean
을 찾고 등록하는 어노테이션이다.@Component
는 Class에 붙어서 Class Level
으로 Custom Bean을 만들어 준다.📖 StereoType Annotation은 모두 Component
로써 동일한 기능을 제공한다.
(컴포넌트로써 동일한 기능을 제공하는 것인지 어노테이션이 동일한 목적의 기능을 제공하는 것 아님)
@Controller
@Service
@Repository
📖 @ComponentScan
은 스프링이 자동적으로 ApplicationContext
를 취합해주는(gather) 어노테이션이다.
📖 SpringBoot
에서는 @SpringBootApplication
에 @ComponentScan
이 포함되어 있어
기본으로 모든 @Component
를 스캔한다.
🎈cf) 하지만 어플리케이션 내에서는 외부 자원(external lib 등)이 필요로 하기 때문에
@SpringBootApplication
을 기본으로만은 할 수 없다.
✍ classpath
내에 존재해야만 스프링 컨테이너가 설정(configure)할 수 있다.
(as long as it exists on the classpath.
)
✍ @Component
은 외부 자원이나, a third-party source 또는 @Component
를 더 할 수 없는 경우에는 소스 코드에 접근을 할 수 없는데 이때 사용 가능한 것이@Bean
이다.
@Bean
은 @Component
와 마찬가지로 스프링이 Bean
을 취합하기(런타임시) 위한 어노테이션이다.
Bean
의 인스턴스 코드와 클래스의 정의가 분리된 구조이기 때문에 외부 자원이나 a third-party source도 Bean
으로 등록할 수 있게 해준다.
🎈 @Bean
은 Class-level
에 사용 할 수 없으며, Method
단위로 선언되어야 한다.
🎈 @Bean
을 사용하는 클래스에는 반드시 @Configuration
이 선언되어야 한다.(스프링 컨테이너에 Bean 을 등록하고자 함을 명시해주어야 한다.)
📖 참고 사이트