如果一个类已经是@Service,那么是否需要在Spring Application类中进行@Autowired?

问题描述 投票:0回答:1

我正在学习一个教程,他们@Service一个类,在我看来应该可以在整个应用程序中使用。为什么@ Autowire-ing应用程序中的类?

应用程序:

@Configuration
@EnableAutoConfiguration    // todo why not @SpringBootApplication
@ComponentScan
public class QuoteAppWsApplication implements CommandLineRunner {


    public static void main(String[] args) {
        SpringApplication.run(QuoteAppWsApplication.class, args);
    }


    @Autowired
    private EventBus eventBus;  //

    @Autowired // todo This is @Service...why is it be Autowired
    private NotificationConsumer notificationConsumer;

NotificationConsumer:

@Service
public class NotificationConsumer implements Consumer<Event<NotificationData>> {

    @Autowired
    private NotificationService notificationService;

    @Override
    public void accept(Event<NotificationData> notificationDataEvent) {  // .getData() belongs to Event<>
        NotificationData notificationData = notificationDataEvent.getData(); //TODO Gets data from Event

        try {
            notificationService.initiateNotification(notificationData);
        } catch (InterruptedException e) {
            // ignore
        }
    }
}
spring-boot event-bus
1个回答
1
投票

@Service@Component的特殊化。它是一个注释,告诉Spring将此类作为Bean包含在Spring上下文中。您可以认为这是在告诉Spring在组件扫描期间要拾取什么并将其放入上下文中。

@Autowired是Spring的注释,用于从上下文中注入某些内容。在声明要退出Spring的内容时,您可以想到这一点。通常,您需要在要Spring调用的任何字段,构造函数或setter上使用此批注,以为您提供其为给定类型管理的对象。

要回答您的问题,是的,您既需要声明要放入上下文中的内容,也要声明何时需要上下文中的内容。

此外,您的前三个注释可以替换为@SpringBootApplication。该注释是一个元注释,这意味着它是包含一系列其他注释的简写。据记录,其中包括所有三个注释。

© www.soinside.com 2019 - 2024. All rights reserved.