为什么我不能使用@Autowired
在这种情况下?
@SpringBootApplication
public class Application {
@Autowired
BookingService bookingService;
public static void main(String[] args) {
bookingService.book("Alice", "Bob", "Carol");
}
}
但可以使用@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");
}
}
不是有两种生成方式吗BookingService
一样的东西?
@Bean
and @Autowired
做两件截然不同的事情。这里的其他答案解释得更详细,但更简单:
那有意义吗?在你的第一个例子中,你要求 Spring 给你一个实例BookingService
,但你永远不会创建一个,所以 Spring 没有什么可以给你的。在第二个示例中,您正在创建一个新实例BookingService
,告诉Spring这件事,然后,在main()
方法,要求归还。
如果需要,您可以从第二行中删除额外的两行main()
方法,并结合您的两个示例,如下所示:
@SpringBootApplication
public 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
在另一处。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)