• Home
  • Archives
  • 随笔
所有文章 友链 关于我

  • Home
  • Archives
  • 随笔

spring推荐构造器注入,为什么?

发布于: 2020-11-26
更新于: 2023-07-09

spring注入方式

在代码开发中,是否老是被spring提示的,请使用构造器注入感到困惑和烦躁,为什么要使用构造器注入,而不能使用field注入or Setter注入呢

The Spring team generally advocates constructor injection as it enables one to implement application components asimmutable objects and to ensure that required dependencies are not null. Furthermore constructor-injected components are always returned to client (calling) code in a fully initialized state. As a side note, a large number of constructor arguments is a bad code smell, implying that the class likely has too many responsibilities and should be refactored to better address proper separation of concerns. ——–BY Spring

倡导构造器注入,因为它使得实现应用组件是作为一个不可变的对象,同时确保它所依赖的项目资源不是null的,此外构造器注入永远是返回调用者一个完全初始化的状态。温馨提示:庞大的构造器入参是坏味道代码,表明这个类有太多的职责,应该以更好的设计模式进行重构

field注入

// 这样子做确实挺简洁明了的,但是容易NPE,因为field injection在不调用时,没办法初始化,而当初始化往往都晚了
public class XXXService{
    @Autowired
    private XXXRepository repository;

    public void test(){
        repository.addSql();
    }
}
优点 对比 缺点
较为直观,清晰明了 相比构造器会出现NPE,循环依赖的情况,当不调用时也无法发现NPE的情况 其实主要也就是对比的内容了

构造器注入

现在强推的注入模式

@Autowired
public constructor(XXXService xxxService){
    this.xxx=xxxService;
}
优点 缺点
能做NPE检查,同时因为是构造器,所以避免了field注入时,需要用到才会初始化的情况 当变量巨多时会导致注入很臃肿,同时如果需要制定类注入时,这个方法不是那么好用了
主要是在初始化时想比setter注入,在类加载实例化时,一定能校验注入的内容不为空,更为安全

setter注入

旧一代spring推荐内容

优点 缺点
避免构造器臃肿庞大,同时可以使得类在之后配置或者重新注入,也能指定注入
spring推荐构造器注入,为什么?
/archives/672e3541/
作者
tyrantqiao
发布于
2020-11-26
更新于
2023-07-09
许可协议
CC BY-NC-SA 4.0
赏

蟹蟹大佬的打赏,大家一起进步

支付宝
微信
  • java
  • spring

扫一扫,分享到微信

微信分享二维码
left join与inner join的性能差异到底咋样
xunit读书笔记--01
© 2024 tyrantqiao 本站总访问量次 本站访客数人次 载入天数...载入时分秒...
  • 所有文章
  • 友链
  • 关于我

tag:

  • 复盘
  • 我
  • 规划
  • java
  • 面试
  • 源码
  • 架构
  • Hadoop
  • HTTP
  • TCP
  • 学习笔记
  • IDEA
  • maven
  • idea
  • Java
  • jdk
  • 面经
  • linux
  • 爱情
  • mysql
  • 性能
  • sql
  • Mysql
  • JAVA
  • 技术
  • Redis
  • MQ
  • Spring
  • 数据库
  • TIDB
  • spring
  • unity
  • chatgpt
  • 经验分享
  • 前端
  • redis
  • vue
  • git
  • shadowsocks
  • hexo
  • blog
  • bug
  • 开发
  • 业务
  • jvm
  • 算法
  • MySQL
  • nginx
  • Linux
  • mq
  • db
  • springCloud
  • ssh
  • python
  • 爬虫
  • test
  • vim
  • 影视剧
  • 中间件
  • 事务
  • 性格
  • 音乐
  • 程序员
  • 随笔
  • mybatis
  • 演讲
  • 域名
  • 猫咪
  • 她
  • github
  • 计划
  • 旅游
  • 软件
  • 心理
  • 情商
  • 幽默
  • 才艺
  • 穿搭
  • 编程
  • 排序
  • 查找
  • 缓存
  • 网络
  • 设计模式
  • c
  • 课程设计
  • centos
  • 数学
  • 本网站主题yilia设计者的主页
如果有问题或者想讨论的可以联系[email protected]或者[email protected]