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.
Difference between @Bean and @Autowired的更多相关文章
- [转载]Spring下IOC容器和DI(依赖注入) @Bean及@Autowired
Spring下IOC容器和DI(依赖注入) @Bean及@Autowired自动装配 bean是什么 bean在spring中可以理解为一个对象.理解这个对象需要换一种角度,即可将spring看做一门 ...
- @Component和@Bean以及@Autowired、@Resource
1. 有这么一个故事,从xml配置文件的bean说起 Spring用xml配置文件的时候(不知道阅读这篇文章的你用没用过,我用过一段时间,那是黑暗伤痛的回忆QQQ),一个xml配置文件里面有很多个 ...
- @Autowired & @Resource 区别 & 解读@Bean
一样 Autowired & @Resource 都可以用来Bean的注入,可以写在属性(字段)上.也可以写在setter方法上 不一样 1.来源不一样 @Autowired 由Spr ...
- Field redisTemplate in xxxxxx required a bean of type 'org.springframework.data.redis.core.RedisTemplate' that could not be found.
*************************** APPLICATION FAILED TO START *************************** Description: Fie ...
- 【spring源码系列】之【Bean的实例化】
人生需要探索的热情.坚持的勇气以及热爱生活热爱自己的力量. 1. Bean的实例化 上一篇讲述了bean的生命周期,其中第一步就涉及到了bean的实例化,本文重点分析bean实例化,先进入源码中的Ab ...
- Spring常用注解,自动扫描装配Bean
1 引入context命名空间(在Spring的配置文件中),配置文件如下: xmlns:context="http://www.springframework.org/schema/con ...
- 自动装配Bean
Spring提供了几种技巧,可以减少XML的配置数量: 自动装配(autowiring):可以减少<property>(setter注入)和<constructor-arg>( ...
- spring中bean配置和bean注入
1 bean与spring容器的关系 Bean配置信息定义了Bean的实现及依赖关系,Spring容器根据各种形式的Bean配置信息在容器内部建立Bean定义注册表,然后根据注册表加载.实例化Bean ...
- Spring实战3:装配bean的进阶知识
主要内容: Environments and profiles Conditional bean declaration 处理自动装配的歧义 bean的作用域 The Spring Expressio ...
随机推荐
- ABBYY FineReader 14扫描和保存文档
在ABBYY FineReader 14中您可以使用扫描"新建任务"窗口选项卡上的内置任务创建各种格式的数字文档.本文介绍使用FineReader 14扫描和保存文档的方法. 1. ...
- 如何修改IDM下载器的临时文件夹位置
所有的应用程序在下载时,都会有一些默认的选项.比如产生的临时文件存放在C盘目录下,或者定期自动更新等设置.那么当我们的计算机上安装了很多程序之后,C盘的空间就会渐渐地变小了,从而有了空间不足等等情况, ...
- 怎么用MindManager2019去做一个好的网络图
大家知道网络图吗?是由作业(箭线).事件(又称节点)和路线三个因素组成的.它是一种图解模型,形状如同网络,故称为网络图.运用网络图能够使步骤简洁明了,今天我我们就说一说网络图软件MindManager ...
- 本地VM安装虚拟机,使用xshell连接
首先把VM设置成上面那样 在ubuntu里面安装ssh apt-get install openssh-server 启动服务 /etc/init.d/ssh startifconfig 查看ip x ...
- 关于Jersey框架下的Aop日志 和Spring 框架下的Aop日志
摘要 最近新接手的项目经常要查问题,但是,前面一拨人,日志打的非常乱,好多就根本没有打日志,所以弄一个AOP统一打印一下 请求数据和响应数据 框架 spring+springmvc+jersey 正文 ...
- mq中nio
MappedFile#appendMessagesInner
- GitHub上最火的、最值得前端学习的几个数据结构与算法项目!没有之一!
Hello,大家好,我是你们的 前端章鱼猫. 简介 前端章鱼猫从 2016 年加入 GitHub,到现在的 2020 年,快整整 5 个年头了. 相信很多人都没有逛 GitHub 的习惯,因此总会有开 ...
- OpenCV-Python图像转换为PyQt图像的变形及花屏无法正常显示问题研究
☞ ░ 前往老猿Python博文目录 ░ 一.引言 在<PyQt转换显示Python-OpenCV图像实现图形化界面的视频播放>介绍了实现在OpenCV和PyQt之间转换并传递图像实现在P ...
- TextClip构造方法报OSError:MoviePy creation of None failed because of the following [WinError 2]系统找不到指定的文件
☞ ░ 前往老猿Python博文目录 ░ 在使用moviepy的构造方法创建实例时报错: "C:\Program Files\Python37\python.exe" F:/stu ...
- PyQt(Python+Qt)学习随笔:Qt Designer中建立CommandLinkButton信号与Action的槽函数连接
在Qt Designer中,通过F4进行信号和槽函数连接编辑时,接收信号的对象不能是Action对象,但在右侧的编辑界面,可以选择将一个界面对象的信号与Action对象的槽函数连接起来. 如图: 上图 ...