@Bean和@Autowired组合使用
总结:@bean产生bean给到spring 容器,@Autowired获取beanhttps://juejin.cn/post/6887071268017799182为什么我不能在这种情况下使用@Autowired?@SpringBootApplicationpublic class Application {@AutowiredBookingService bookingService;pub
总结:@bean产生bean给到spring 容器,@Autowired获取bean (@bean和beans.xml是2种不同配置bean的方法)
https://juejin.cn/post/6887071268017799182
为什么我不能在这种情况下使用@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和@Autowired做了两件截然不同的事情.这里的其他答案更详细地解释,但更简单的说明:
@Bean告诉Spring’这是这个类的一个实例,请保持它并在我问的时候把它还给我.
@Autowired说’请给我一个这个类的实例,例如,我之前使用@Bean注释创建的实例’.
那有意义吗?在你的第一个例子中,你要求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它会变得很有用.
更多推荐
所有评论(0)