@Bean并
@Autowired做两件事。此处的其他答案将更详细地解释,但更为简单:
@Bean
告诉Spring’这是此类的一个实例,请保留该类,并在我询问时将其还给我’。@Autowired
说“请给我一个该类的实例,例如,我@Bean之前用注释创建的一个实例”。
那有意义吗?在第一个示例中,你要让Spring给你一个的实例
BookingService,但是你从未创建一个实例,因此Spring没有任何东西可以给你。在第二个示例中,你将创建一个的新实例
BookingService,将其告知Spring,然后在该main()方法中要求其返回。
如果需要,可以从第二种
main()方法中删除另外两行,并结合以下两个示例:
@SpringBootApplicationpublic class Application { @Autowired BookingService bookingService; @Bean BookingService bookingService() { return new BookingService(); } public static void main(String[] args) { bookingService.book("Alice", "Bob", "Carol"); }}在这种情况下,
@Bean注释为Spring提供了
BookingService,并加以
@Autowired利用。
这将是一个毫无意义的示例,因为你都在同一个类中使用它们,但是如果你
@Bean在一个类中定义了该类,而在另一个类中定义了它,则它将变得很有用
@Autowired。



