329 Star 3.1K Fork 558

GVPnoear / solon

 / 详情

【调查与讨论】是否有必要增加构造函数注入?

待办的
拥有者
创建于  
2024-05-04 17:18

Solon 的组件注解目前只支持“字段注入”。是否有必要增加构造函数注入?

使用字段注入

  • 好处,不会有循环依赖问题
  • 坏处,bean 刚产生时可能还未注绪(某些字段未完成注入)

使用构造函数注入(技术实现跟 @Bean 函数差不多)

  • 好处,Bean 刚产生时即就绪(所有组件都用构造函数注入,才有这个效果);且字段可设为只读
  • 坏处,有循环依赖问题(好像挺容易产生)

两者性能区别不会太大。不过,会带来很不同的使用方式。

评论 (18)

西东 创建了任务
西东 修改了描述
西东 修改了描述
展开全部操作日志

需要的,迁移旧应用可以少一些麻烦

如果不出于“迁移”的角度看,你会不会有不同的想法?

不需要,形式大于内容

引导用户从设计上避免循环依赖是有意义的

不需要,都是被惯的,,,
真的没什么卵用

西东 修改了描述
西东 修改了描述

纯个人看法:首先无论字段注入,构造注入还是 setter 注入都是开发者的个人习惯,建议提供,其次不同框架迁移中需要对初次使用者提供一个过渡期,然后构造注入可以降低耦合度,提高属性的隐匿性和整体性,总体而言,联系提供,具体看开发者个人习惯原则,毕竟多一个选择也不是什么坏事

当必须要用到构造器注入的时候,手写代码可能是更好的选择

多一个选项没什么不好

极左,左,右 ,极右。
极左:守住清净 (缓慢发展)
左:功能优先 (稳健发展)
右:概念与功能同时顾及 (良性发展)
极右:最求最新概念,同时追求前沿的功能 (风险)

西东 修改了描述

不需要,除了会引发问题 带不来啥收益

1、从平台角度考虑,应该都具备;可以不用但是必须要有
2、历史项目的迁移兼容性
建议结合lazy的方式实现,降低影响

不需要

网上常见吹spring构造注入哪套,什么提升性能,官方推荐,经常翻spring官网的朋友都知道,没有那么花里胡哨。

实际开发实践中发现,某些业务开发bean注入是存在依赖循环的。构造注入让开发变得不再灵活,要明确bean是注入顺序,否则初始化失败。

以我接手的spring4老项目发现,一路升级到spring5最新版,3年变迁,发现还是弃用的构造注入,因为不灵活,bean太多,一不小心就突然循环依赖,变成手动注入(@PostConstruct、@Init中初始化)。构造注入却变成了后面增加功能埋坑(直接使用已有的bean实现业务逻辑反复调用)。项目成员更替,最后还是@AutoWrited香。

最后,铁打的项目,流水的维护成员。

我看群里有人提到构造注入简洁,可能这位朋友没有接触过大项目、老项目(5年以及十几年)。经常维护这些项目的朋友都知道,这些项目的特点是一个service中需要注入十几、几十个bean,并不简洁。如果朋友接触的项目活不了这么久,就当我没说。

不同人,会有不同想法。正常的:)

推荐增加这个功能

不好意思,我突然觉得虽然我用不上,实际开发也不推荐这么玩。但框架有必要增加这个功能,多一个选项。肯定有人相信网上构造注入的哪套,所以构造注入还是得有,大家都这么玩了,你不能没有,这对solon也有好处。哪些依赖循环之类的,应该由开发者自己搞定。

西东 任务状态待办的 修改为已关闭
西东 任务状态已关闭 修改为待办的

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(14)
516211 mose x 1693876136 418674 shuaishuai1995 1640058680 1838122 scorpioofaug 1712718101 61541 whitedolphin 1578915956
加载更多
Java
1
https://gitee.com/noear/solon.git
git@gitee.com:noear/solon.git
noear
solon
solon

搜索帮助