
@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 을 등록하고자 함을 명시해주어야 한다.)
📖 참고 사이트