Demo01

 1 @SpringBootApplication
2 public class Application {
3
4 @Autowired
5 BookingService bookingService;
6
7 public static void main(String[] args) {
8 bookingService.book("Alice", "Bob", "Carol");
9 }
10 }

Demo02

 1 @SpringBootApplication
2 public class Application {
3
4 @Bean
5 BookingService bookingService() {
6 return new BookingService();
7 }
8
9 public static void main(String[] args) {
10 ApplicationContext ctx = SpringApplication.run(Application.class, args);
11 BookingService bookingService = ctx.getBean(BookingService.class);
12 bookingService.book("Alice", "Bob", "Carol");
13 }
14 }

大家可以先思考一下,上面两个demo中,生成的BookingService是否一致呢?

答案是NO!

@Bean 和@Autowired是两个用途不同的注解。

@Bean 它会告诉Spring,这是一个类的实例,先保有它的实例,然后在需要的时候再去调用这个实例。

@Autowired 它告诉Spring,请给我这个类的实例,比如,之前用@Bean注解生成的实例。

明白了吗?我的朋友。在Demo01中,@Autowired让Spring给它一个BookingService的实例,但是之前没有任何地方创建过这个实例,所以肯定会失败。在Demo02中,@Bean创建了这个实例,然后在main方法中,需要使用的地方进行调用。

将Demo01和Demo02进行整合,可以变成Demo03的样子:

 1 @SpringBootApplication
2 public class Application {
3
4 @Autowired
5 BookingService bookingService;
6
7 @Bean
8 BookingService bookingService() {
9 return new BookingService();
10 }
11
12 public static void main(String[] args) {
13 bookingService.book("Alice", "Bob", "Carol");
14 }
15 }

参考链接:

https://stackoverflow.com/questions/34172888/difference-between-bean-and-autowired#:~:text=Annotating%20%40Bean%20only%20registers%20the,Object)%20from%20Spring%20Application%20Context.

最新文章

  1. Spark笔记:RDD基本操作(下)
  2. ASP.Net MVC开发基础学习笔记(1):走向MVC模式
  3. C#winform调用外部程序,等待外部程序执行完毕才执行下面代码
  4. python : jquery实现左侧菜单
  5. c#winform如何通过控件名查找控件
  6. 响应式布局(Responsive layout,RL)的简单Demo
  7. Ogre骨骼动画
  8. ASP.NET MVC 之控制器与视图之间的数据传递
  9. POJ2993——Help Me with the Game(字符串处理+排序)
  10. freemarker对数字的处理
  11. UVA548 tree的思路
  12. Hadoop IO
  13. centos7进单用户
  14. Python之路-文件操作(py3)
  15. Scala进阶之路-反射(reflect)技术详解
  16. 黄聪:wordpress如何获取访问的网站的cookie值
  17. 常用.bat
  18. vue2 自定义时间过滤器
  19. dubbo实际应用中的完整的pom.xml
  20. XML编辑器之XMLSpy2005

热门文章

  1. CTF-WEB-HCTF 2018 Warmup
  2. FL Studio乐理教程之添加和弦
  3. 教你怎么设置Vegas渲染输出的选定范围
  4. 从本质上学会基于HarmonyOS开发Hi3861(主要讲授方法)
  5. 「LOJ 541」「LibreOJ NOIP Round #1」七曜圣贤
  6. 二 HTML文档基本结构
  7. Contest 982
  8. Java集合【8】-- ArrayList源码分析
  9. [Docker]Docker与Linux ip_forward数据包转发
  10. 冲刺随笔——Day_Ten