Différence entre @Bean et @Autocâblés

Pourquoi ne puis-je pas utiliser @Autowired dans ce cas?

@SpringBootApplication
public class Application {

    @Autowired
    BookingService bookingService;

    public static void main(String[] args) {
        bookingService.book("Alice", "Bob", "Carol");
    }
}

mais peut utiliser @Bean

@SpringBootApplication
public class Application {

    @Bean
    BookingService bookingService() {
        return new BookingService();
    }

    public static void main(String[] args) {
        ApplicationContext ctx = SpringApplication.run(Application.class, args);
        BookingService bookingService = ctx.getBean(BookingService.class);
        bookingService.book("Alice", "Bob", "Carol");
    }
}

Ne sont pas les deux façons de générer des BookingService la même chose?

  • Bean annotation est pour l'enregistrement de votre haricot au printemps contexte alors que Autowried annotation est pour obtenir de l'haricot de printemps le contenu de l'application et il câblage en tant que dépendance d'un autre objet
  • Vous devez délivrer le BookingService classe trop. Parce que si c'est annotée avec des Composant de votre première classe serait également le travail comme pour le second.