zoukankan      html  css  js  c++  java
  • Difference between @Bean and @Autowired

    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.

  • 相关阅读:
    c/c++基础 输入函数/流
    数据库的码/键
    sql plus笔记
    cmd delete oracle related
    CAN总线
    SAR ADC : 逐次逼近寄存器型(SAR)模数转换器(ADC)
    Cortex-M3寄存器等基础知识
    Cortex-M3知识点
    ARM指令和Thumb指令区别
    8051、ARM、AVR
  • 原文地址:https://www.cnblogs.com/lihao007/p/13916747.html
Copyright © 2011-2022 走看看