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.

  • 相关阅读:
    [BZOJ5339] [TJOI2018]教科书般的亵渎
    拉格朗日插值法
    [LOJ#2340] [WC2018] 州区划分
    [洛谷4609] [FJOI2016]建筑师
    [CF960G] Bandit Blues
    [BZOJ2115] [WC2011] Xor
    [Codeforces 809E] Surprise me!
    无需AutoCAD,用C#生成DWG文件
    扩展方法的几点总结
    RedirectStandardOutput
  • 原文地址:https://www.cnblogs.com/lihao007/p/13916747.html
Copyright © 2011-2022 走看看