[java] 자바 함수형 인터페이스를 사용하여 스프링 프레임워크에서의 의존성 주입을 구현하는 방법은 어떻게 되나요?
스프링 프레임워크는 일반적으로 의존성 주입을 위해 @Autowired
어노테이션을 사용합니다. 그러나 함수형 프로그래밍을 지향하는 경우, @Autowired
를 대신할 수 있는 함수형 인터페이스를 정의하여 의존성을 주입할 수 있습니다.
아래는 이러한 방법을 사용하여 스프링에서 의존성 주입을 구현하는 예시입니다.
@FunctionalInterface
public interface MessageService {
String getMessage();
}
@Component
public class MyMessageService implements MessageService {
@Override
public String getMessage() {
return "Hello, world!";
}
}
@Configuration
public class AppConfig {
@Bean
public MessageService messageService() {
return new MyMessageService();
}
@Bean
public Consumer<MessageService> messageConsumer() {
return service -> {
String message = service.getMessage();
System.out.println(message);
};
}
@Bean
public ApplicationRunner applicationRunner(Consumer<MessageService> messageConsumer) {
return args -> messageConsumer.accept(messageService());
}
}
위의 예시 코드에서는 MessageService
라는 함수형 인터페이스를 정의하고, MyMessageService
클래스에서 이 인터페이스를 구현합니다. MyMessageService
는 getMessage()
메소드를 오버라이드하여 “Hello, world!”라는 메시지를 반환합니다.
AppConfig
클래스는 스프링의 @Configuration
어노테이션을 통해 스프링 빈을 설정하고, messageService()
메소드를 통해 MyMessageService
를 Spring Bean으로 등록합니다. 또한 messageConsumer()
메소드는 Consumer<MessageService>
를 Bean으로 등록하고, ApplicationRunner
를 통해 messageConsumer
를 호출하여 의존성 주입을 수행합니다.
이 방법을 사용하면 스프링 프레임워크에서 함수형 인터페이스를 통한 의존성 주입이 가능해집니다.