文章目录 Springboot依赖注入Bean的方式一、Field 注入/属性注入二、set注入三、构造器注入 SpringBoot依赖注入Bean的方式 一、Field 注入/属性注入 @Autowired注解的一大使用场
@Autowired注解的一大使用场景就是Field Injection。
@Controllerpublic class UserController { @Autowired private UserService userService;}
通过Java的反射机制实现,所以private的成员也可以被注入具体的对象
优点
缺点
Setter Injection需要依赖@Autowired注解,使用方式与Field Injection有所不同,Field Injection时@Autowired是用在成员变量上,而Setter Injection的时候,@Autowired是用在成员变量的Setter函数上。
@Controllerpublic class UserController { private UserService userService; @Autowired public void setUserService(UserService userService){ this.userService = userService; }}
通过调用成员变量的set方法来注入想要使用的依赖对象。
优点
缺点
Constructor Injection是构造器注入,是springboot最为推荐的一种使用方式。
@Controllerpublic class UserController { private final UserService userService; public UserController(UserService userService){ this.userService = userService; }}
注意:
不能提供无参构造方法,否则Springboot默认会加载无参的构造方法,Bean实例对象会为null
Springboot官方建议使用final来修饰成员变量,然后通过构造方法来进行注入。原因:final修饰的成员变量是不能够被修改的;不加final虽然也能注入Bean,但是若被其他人修改为null,可能会导致不必要的问题,所以最好是加final。
通过对象构建的时候建立关系,这种方式对对象创建的顺序会有要求,当然Spring会为你搞定这样的先后顺序,除非你出现循环依赖,然后就会抛出异常。
Spring 4.x 的时候,Spring 官方在对比构造器注入和 Setter 注入时,推荐使用构造器注入方式:
优点
能够保证注入的组件不可变,并且确保需要的依赖不为空。此外,构造器注入的依赖总是能够在返回客户端(组件)代码的时候保证完全初始化的状态。
若手工写构造方法觉得麻烦,也可以使用lombok中的@RequiredArgsConstructor
@RequiredArgsConstructorpublic class VerifyController { private final UserService userService; private final StudentService studentService;}
@RequiredArgsConstructor
@RequiredArgsConstructor 注解是针对标有 @NonNull 注解的变量和 final 变量进行参数的构造方法。
构造器注入的原理可参考:《https://blog.csdn.net/sihai12345/article/details/101951348》
来源地址:https://blog.csdn.net/weixin_49114503/article/details/129181584
--结束END--
本文标题: Springboot依赖注入Bean的三种方式,final+构造器注入Bean
本文链接: https://www.lsjlt.com/news/376588.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-04-03
2024-04-03
2024-04-01
2024-01-21
2024-01-21
2024-01-21
2024-01-21
2023-12-23
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0