spring 的约定优于配置概念好吗?

2022-07-01 21:29:03 +08:00
 kongkongye

尤其是 spring security+spring boot ,虽然几行代码就跑起来了,但想改却很难,因为不知道约定了啥,背后偷偷给我跑起来个啥,只能官方文档加源码配合着研究,没觉得学习成本有降低。

最终搞了个七七八八,但对于整体的结构与数据流还是没有完全理解,因为 spring boot 的自动配置会检测条件什么的,造成配置的动态化难以捉摸,虽然类都静态写在那里,但会不会实例化还要跑起来才知道。

而且 spring 里普遍的各个重要类之间的关系比较复杂,个人感觉不是线性也不是树形,而是网状的,比较纠缠。

4117 次点击
所在节点    程序员
37 条回复
wangkun025
2022-07-02 09:59:56 +08:00
@RuLaiFo 可能这就是我每次学 Spring Boot 都觉得痛苦的原因吧。
DoctorDeng
2022-07-02 10:30:53 +08:00
肯定是约定优于配置的概念更好的,确实方便上手,对于有个性化需求的地方确实还是得看文档。

楼上有些说难学习的,多用用就好了。有了 Spring Boot 模块复用就非常方便了,我现在日常开放中,很多东西都是单独抽离成 xxx-starter ,其他项目只需要引入这个依赖就能够使用了,不像以前,导入依赖后还得配置一大堆东西
mejee
2022-07-02 11:41:22 +08:00
不太喜欢 spring boot 那一套,虽然原因是自己没有好多学,感觉稍微用用还行,高级一点的定制化的用,有点束手束脚的
veightz
2022-07-02 13:52:47 +08:00
对新手友好,对专家友好,但中间阶段的人很崩溃
kongkongye
2022-07-02 14:33:33 +08:00
@RuLaiFo 的确过于动态化了,代码层面我更想静态一些,这样有助于结构的稳定与追溯。
spring 里框架有关的类我自定义个 bean ,就可能有其他自动配置失效了,除非很了解,否则这种未知会造成心里没底。
james122333
2022-07-02 15:58:27 +08:00
其实框架都是约定的 只是占比还有实现差异
spring 糟糕的点在于註解表达力太差又太零碎
ikas
2022-07-02 19:31:54 +08:00
spring 或者 springboot,人家提供自动化配置,也支持完全手动配置..
从来都是看人.你不想用约定,那完全可以用自己的思维配置
至于说什么 xml,注解,java..无非都是一种配置方式而已..
james122333
2022-07-02 19:49:15 +08:00
@ikas

当你被毒害过就不会条条大路通罗马了
理论上是如此 但路有很多种
ikas
2022-07-02 20:58:08 +08:00
@james122333
怎么说呢..
不想学习的人..他们直接用了
想学习的人发现路太多,又不想从 spring 基础学习.
真的搞明白了,就会发现我说的这些.其实什么约定,手动配置..没什么难度..
wupher
2022-07-02 21:04:12 +08:00
在 RoR 之前,没有 Sring 或者 Spring Boot 时,Struts, hiberate 这些光设置文件就一堆 xml 。

那时 xml spy 真是必备工具。有时光搭个项目框架,就要花 1 天。

当前第一次学习 RoR 时,真是大受震撼。
kongkongye
2022-07-02 21:20:11 +08:00
有的人可能语言过激了,这里并没说 spring boot 的约定优于配置不好,只是一种设计上的吐槽与探讨,想想 npm 与 pnpm ,npm 并没有不好,但是针对缺点弄个新框架也未尝不可。约定其实就像软件设置里的默认值,只是软件默认值列表是可以直观展示出来并修改的,但 spring boot 里的约定太多太细了,关系错综复杂也不是一个简单的列表可以展示的,约定优于配置就是把双刃剑,因此后续或许某人就觉得这点不爽然后弄个新框架呢?开发技术是一直在进化的,不能因为一个东西自己用着挺爽就觉得一直不会变,不能变。
cs419
2022-07-02 22:48:49 +08:00
spring boot 的思维 适合快速体验 某个框架
又比如 张三希望推广自己的开源库 做个适配 spring boot 的适配器
让别人能快速的 体验这个开源库
张三 写的 boot starter 如果是凑合写的,兼容性就差,要保证兼容性好,还得勤快的维护

用过 docker 的话 就有相似的感受
一行命令就能快速启动 mysql
快速的体验这个东西
但体验之后 如果是生产环境
还是 应当自己对 mysql 的配置文件 进行配置的
自己写 dockerfile 调试比较繁琐

同样的 用 spring boot 整合某个框架的时候
你要是想糊弄 就用自动配置 (有可能遇到与其他库冲突的问题)
想要深度定制 就自己基于 xml 的形式去配置
xml 虽然啰嗦 但每项配置都是你亲自加的 不会有暗坑
明坑的话 找解决方案容易点

用过 mybatis plus 与 flowable 一起使用 会冲突
好像是因为他俩 sqlSessionFactory 重复了
于是干脆都自定义 也不用他俩的 boot starter 了
james122333
2022-07-03 14:31:16 +08:00
@ikas

java 上 spring 目前是一支独秀
james122333
2022-07-03 14:34:50 +08:00
@ikas

框架本身都是要有一定程度的易用
然而东西大了才会知道优缺
一开始肯定是不难的 除了你用的都很基本
james122333
2022-07-03 14:41:19 +08:00
@frankly123

然而我自己手刻结果一模一样不複杂效能又好
这是种刻意的门槛 很多工具都这样
akira
2022-07-03 21:17:58 +08:00
开箱即用比什么都重要。 跑个东西还要配半天,这种没人会喜欢的
nothingistrue
2022-07-04 09:39:14 +08:00
@kongkongye 约定优先于配置,不是约定代替配置,你要不乐意,完全可以手动配置自己搞。你所看到的复杂,跟约定优先于配置没关系,是配置本来就这么复杂,约定是降低,而不是增加了复杂度。你现在的看法,举个例子来说就是:不怪路本来就难走,而怪修路的没把路修好。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/863524

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX