@ComponentScan의 기본 동작클래스에 @Configuration 어노테이션과 함께 @ComponentScan 어노테이션이 붙어 있으면, 해당 Configuration 은 해당 패키지 하위의 모든 클래스를 스캔해 @Component 어노테이션이 붙은 객체들을 모두 Bean으로 만든다. 예를 들어 다음과 같은 패키지 구조와 파일들이 있다고 해보자. section8 패키지는 다음 경로에 있다: com.kotlinworld.spring.di.section8 이곳에서 ScanConfiguration파일은 @Configuration 어노테이션과 @ComponentScan 어노테이션이 붙은 클래스이고@ComponentScan@Configurationclass ScanConfiguration ScanReq..
@Component
@Component를 사용하지 못하고 @Bean을 사용해야 하는 경우@Component 어노테이션은 클래스 위에 붙는다. 즉, 내가 클래스를 만들 수 있을 때만 사용할 수 있다. 예를 들어 외부 라이브러리의 클래스를 Bean으로 만들 경우 @Component를 사용할 수는 없다. 예를 들어 A메신저에서 라이브러리를 제공하는데, 이 라이브러리에는 A메신저의 채팅방에 알림을 보내기 위한 AChatService 라는 클래스를 제공한다고 해보자.// 다른 라이브러리의 클래스라서 수정할 수 없다고 가정class AChatService() { fun sendMessage(message: String) { println("Message sent: $message") }} 이런 경우 우리는 A..
@Bean 어노테이션 사용해 Bean 등록하기이전 글에서 유저 정보를 조작하는 UserRepository 인터페이스를 구현하는 객체가 InMemoryUserRepository와 DbUserRepository 두개가 있고, 이 중 하나를 UserCreator 클래스에서 사용한다고 했을 때 코드를 다음과 같이 구성했었다.interface UserRepository { fun createUser(id: String, user: String)}class InMemoryUserRepository(): UserRepository { override fun createUser(id: String, user: String) { println("User $user created with id: $..