@Bean 和 @Autowired 之间的区别

2023-12-05

为什么我不能使用@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做两件截然不同的事情。这里的其他答案解释得更详细,但更简单:

  • @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在另一处。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

@Bean 和 @Autowired 之间的区别 的相关文章

随机推荐

  • getline() 设置故障位并跳过最后一行

    我在用着std getline 枚举文件中的行 并且它大部分工作正常 然而这让我很好奇 std getline 正在跳过我文件中的最后一行 但前提是它是空白的 使用这个最小的例子 include
  • 如果在移动设备上查看,则会显示弹出窗口

    我有一个网站需要将移动用户重定向到移动网站 但是由于这些网站托管在不同的地方 我无法设置 cookie 来记住它们是否是从移动网站定向的 因此存在一个连续的循环 我现在想做的就是如果用户在移动设备上查看 则显示一个弹出窗口 为他们提供在移动
  • 将 azure ml studio 设计器项目导出为 jupyter 笔记本?

    我希望我在这里没有遗漏一些明显的东西 我正在使用新的 azure ml studio 设计器 我能够用来创建数据集 训练模型并很好地使用它们 azure ml studio 还允许创建 Jupyter 笔记本并使用它们进行机器学习 我也能做
  • 为什么 JavaScript 对话框(警报、确认)会停止页面重绘?

    在浏览器页面上打开模式对话框 停止页面重绘 脚本开始在后台异步运行 不间断 我说明了这个 JSfiddle 中的行为http jsfiddle net YNbux 当alert 当警报关闭时 会显示并在动画中跳跃 此行为存在于 至少在我的计
  • 手动更改多租户会话

    我需要创建一个多租户应用程序 能够在 java 代码内的模式之间进行切换 不基于用户请求 我读过文章 https fizzylogic nl 2016 01 24 make your spring boot application mult
  • 如何使用谷歌应用程序脚本获取谷歌电子表格最后一行的值

    我如何使用谷歌应用程序脚本从谷歌电子表格的最后一行获取值或数据 我已经尝试了很多次 但仍然无法获取数据 这样做的目的是获取记录的最后一个 ID 以便我能够添加另一个 ID 递增的记录 您可以使用 getLastRow 获取包含内容的最后一行
  • 在 gridview Asp.Net 中使用 Dropdownlist?

    我想在 gridview 上使用下拉列表 我有来自 asp net 的以下代码
  • 更新继承的财产

    var foo x 1 var bar proto foo proto specific to implementation var bar Object create foo same result as above with stand
  • 如何将pandas数据框转换为namedtuple

    如何将pandas数据框转换为namedtuple 该任务将面向多处理工作 def df2namedtuple df return tuple df row itertuples有选择name and index 您可以使用它们返回精确的输
  • 如何循环、匹配、替换?

    我有多个带有相同花括号的字符串 如果计数为 1 则需要替换第一个出现的字符串 我想将它们替换为动态字符串 如果计数为 2 则替换第二个出现的字符串 依此类推 直到条件满足
  • 收到错误 - System.InvalidOperationException 未处理

    我刚刚开始学习Windows应用程序开发 我们得到了自学项目来开发一个Windows应用程序 我正在尝试创建发送电子邮件的应用程序 我创建了一个类MsgSender cs来处理这个问题 当我从主窗体调用该类时 出现以下错误 System I
  • 暂时保存 Git 更改

    Is git stash我想探索什么 假设我在笔记本电脑上处理项目 但我需要将到目前为止所做的工作转移到桌面上 两台 PC 都同步到集中式 GIT 存储库 我还不想提交更改 我想在另一台电脑上从上次中断的地方继续 git stash仅在本地
  • 如何从 CXF Rest 客户端获取日志记录?

    这花了我很长时间才弄清楚 我问这个问题是为了给其他人解答 如何从 CXF Rest 客户端获取有用的日志记录信息 EG url params payload response 等 注意 这个问题已经存在 但它询问的是 CXF 和 Reste
  • 当包含“xmlns”属性时,Selenium 无法找到 Xpath

    基本上我正在尝试使用 Selenium 的 Xpath 处理以下 HTML a Public Profile a 我正在使用以下选择器 a text Public Profile 看起来很简单 但是 根据 Selenium 的说法 它返回
  • PHP运算符优先级

    我无法理解 php 如何计算标准数学函数 在一个具体的例子中 我有这样的计算 225 154 256 138 256 256 81 256 256 256 没错 没有括号 当用 php 执行时会产生这个数字 1 368 038 113 现在
  • 位置:固定重叠页

    这里是fiddle 我正在制作一个杂货清单网络应用程序 并且我正在将顶部 div 设置为固定位置 当我这样做时 div 似乎与页面的其余部分重叠 我尝试过在 css 中使用两个位置 position relative position fi
  • set/getAttribute 比较仅适用于字符串?

    我想设置一个span node s visited归因于true or false基于是否已被访问 test function test var el document createElement span el setAttribute
  • PHP 显示目录中的随机 n 张图像

    我想显示文件夹中随机的 n 张图像 目前我正在使用这个脚本来显示图像 div class item img src div 我只想要 10 个 或 n 个 图像 这太随机了 这个怎么做 The shuffle 方法将以随机顺序放置给定数组的
  • OpenShift 上的 PHP:如何启用错误和警告?

    我已将我的应用程序移至 OpenShift 现在 为了方便其实际工作 我想启用页内错误和警告 目前 我看到一个空白页面 如何启用错误 在 PHP 中 它位于php ini error reporting E ALL display erro
  • @Bean 和 @Autowired 之间的区别

    为什么我不能使用 Autowired在这种情况下 SpringBootApplication public class Application Autowired BookingService bookingService public s