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