@Component 어노테이션과 @Bean 어노테이션은 둘 다 스프링 컨테이너에 빈으로 등록하기 위한 어노테이션이다.
@Component
public class Component {
// ...
}
@Configuration
public class Config {
@Bean
public Sort<String> bubbleSort(){
return new BubbleSort<>();
}
}
@Configuration
public class Config {
@Bean
public Sort<String> bubbleSort(){
return new BubbleSort<>();
}
}
@Component
public class Config {
@Bean
public Sort<String> bubbleSort(){
return new BubbleSort<>();
}
}
두 예시를 비교해 보면 단지 클래스 레벨이 선언된 어노테이션만 다르다. @Configuration 어노테이션은 결국 @Component 어노테이션이기 때문에 같은 동작을 하게 된다. 하지만 두 어노테이션은 작은 차이가 있다.
@Configuration : @Configuration 어노테이션은 프록시 모드로 빈을 생성하기 때문에 빈으로 등록되면 프록시 기능을 사용할 수 있게 된다.
@Component : @Component 어노테이션은 light mode(경량모드) 이기 때문에 프록시 빈으로 등록이 안되고 그대로 new 생성자로 생성되기 때문에 팩토리 메서드와 가깝게 동작한다. 즉 두 번 선언되면 두 번 인스턴스가 생성되고 세 번 선언되면 세번 인스턴스가 생성된다.
잘 읽었습니다