@component : 모든 스프링 빈에 사용할 수 있는 일반적인 어노테이션
@Service,@Repository,@Controller,@RestController
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class MyComponent {
private final MyService myService;
@Autowired
public MyComponent(MyService myService) {
this.myService = myService;
}
}
--> 클래스 레벨에 사용
이 설정 클래스는 보통 @Configuration 어노테이션으로 정의된다.
@Configuration, @Bean
ex) 예를들면 api 기본 설정 값을 빈(객체)으로 만들어 필요할 때마다 꺼내쓰고 싶으면 @Configuration 클래스안에 @Bean 메서드 만들어서 런타임시 필요할 때마다 호출한다.
@Configuration
public class AppConfig {
@Bean
public MyService myService() {
return new MyServiceImpl();
}
}
<context:component-scan> 태그는 @Component와 그 특화 어노테이션뿐만 아니라 @Configuration 어노테이션이 붙은 클래스도 스캔하고, 스프링 컨텍스트에 자동으로 등록한다
※주의1)
@bean은 런타임중에 만들어져서 사용된다. 스캔은 @Configuration까지이다.
사실 bean이든, componenet든 간에 사용목적은 같다.
클래스레벨에서 구현할것이냐, 메서드 레벨에서 구현할 것이냐 그 차이