단순히 객체를 등록하는 어노테이션의 경우 @Component를 쓰면 될텐데... 라고 생각했는데 생각보다 @Bean 코드가 많아서 공부함
@Bean의 경우
개발자가 직접 제어할 수 없는 외부 라이브러리의 경우 사용함.
자바에서 비동기 처리의 경우 쓰레드 풀의 사용을 위해 ThreadPollTaskExecutor()를 사용하는데 ThreadPoolTaskExecutor의 경우 그 내부에 @Component를 선언할 수 없음.
따라서 외부에서 인스턴스를 생성하고 스프링으로 제어하기 위해 @Bean을 사용함.
이를 통해 인스턴스를 생성하는 메소드 위에 @Bean을 사용가능
@Component의 경우
스프링에게 인스턴스 생성 및 제어를 맡김.
따라서 스프링이 인스턴스를 생성할 수 있도록 반드시 클래스 위에 @Component를 붙여주어야함.