摘自:https://www.zhihu.com/question/537894826

Java开发不用Spring生态有前途吗?

比如在某些大厂自己封装好的框架直接用,感觉没啥提升

新增:做后端web开发。这套框架不可能用于行业标准,因为底层技术都很陈旧。感觉自己就是个二开工具人吧

都是工具,一个工具学会了只能在一个地方用,和一个工具学会了能在很多地方用,自然后者更好,更能“提升”。

我自己真弄了 Java 框架,06 年做的 PHP 版,11 年后改用 Java 重写,然后一直维护到现在。空口无凭,代码敬上:https://github.com/ihongs/HongsCORE

寥寥几颗星没啥说的,我也不在意这个。

这个小玩意可以工作在 Tomcat 等应用容器下,内置了 Jetty 所以也可以独立运行,内置了 Lucene 并进行封装,大部分场景(我司的场景)可以完全替代关系数据库,开发了一个简单的数据结构定义工具,可以通过简单设置构建起 CRUD 接口和简单聚合统计接口,并“生成”前后台页面,且可以进一步通过 JSP 作为脚本控制接口细节。

以上算广告吧,不扯了,说说我的烦恼。

从原 PHP 版到现在的 Java 版,都在当时和现在公司的工作应用过,也针对业务性质进行过改造。总的来说,省了不少事。目前团队只有两个前端承担网站、微站和微信小程序的开发工作,我一人承担 API 和后台及部分临时性活动定制的开发工作。

早先的 PHP 版吧,使用期间没啥问题,领导、组员都没意见,甚至觉得挺方便,其中有个麻烦是离职的同事比较郁闷,因为他讲不清楚他用了个什么框架;我时常无意间讲讲观察到的各个框架的细节异同,他们换东家后都高升了,当然这主要还是他们自己优秀。从那离职多年后,同事都走光了,原公司都被收购了,还会有人来邮件询问技术细节,但很多我自己都忘了,当初留过文档的,但什么都没带走。

到 Java 版,起先我是不打算用的,但因为庙实在太小,组员离职后新人难以为继,于是先斩后奏在一个小的新的项目使用了自己的框架,老板也接受了。再后来我也没想到,这个小项目越来越被老板寄予厚望,规模越来越大,以至于公司内外各种数据统统放到了这套系统上,直到变成了实际上的公司业务系统。于是我就顺应当时潮流,改叫为数据与运营中台系统,一套系统对接上十个网站、小程序。

量上去后,最先遇到的麻烦是并发处理能力。由于起初就是想搞个简单的 CRUD 自己玩,也不想成天建表写 SQL,拿 Lucene 做了数据读写封装,并用他的快速排序特性做了几个简单的统计封装。没有用 ES,集成在系统一起,因此只能单机部署,现在要拆就很痛苦,不拆的话,无论我如何优化效率也有限。按实际情况来说,以我司日常和特别活动的量来说是完全够用的,但老板对单机很害怕,不能热备不能做负载均衡自动切换机器,这是个很头疼的问题。有时候我都想上套 Kafka 做分流做双机互相热备,但零散的事太多,实在没精力搞了。

你可以说这是我的本事不行,这困境是我自己搞出来的(但我用着是真省人省时间)。兄弟单位有用 Spring、ES、Neo4j 等,他们遇到的一些小问题在我这看来完全不算事,底层我够得着很容易控制细节。他们大可直接甩锅给那些框架,从上到下也没异议,毕竟谁也没法短时间内替换这些,即使有能力去改源码,也没法保证改不出别的问题,并给未来维护升级带来额外的麻烦。必须承认,那些通用框架、组件是一群行业里顶级的工程师研发出来的,我这样的无名小卒敲敲打打搞出来的完全没法比。

有时候,会为了通用一点刻意保持底层简单,但领导们会说反正这是你做的嘛,你就改改吧。有时候,出了点问题,即使我在尽可能短的时间定位并修复了问题,也会在未来很长时间被质疑,这带来内心的煎熬,让人彻夜难眠。

如果把时间拨回几年前那个小项目开始技术选型的那天,我是不会选自己的框架的。代码写多写少写快写慢都一样,多几个人写也没啥不好,都要给工资的嘛,何必自寻烦恼呢。

题主在描述里写的“自己封装好的框架直接用,感觉没啥提升”讲得很对,一个工具学会了使用,但只能在一个地方用,离开来这里屁用没有,这就是没有提升。当然,你说的这个大厂的框架要是成为了行业标准,那就有提升、有前途。

我觉得这一块我比较有发言权。因为我已经经历了spring的发展阶段。

我是在2013年开始做一些开源项目的,在这之前的10年间,我在项目中根本就不使用Spring生态,那时候我用的是servlet还有就是typestry,估计大部分人都没有听说过这个,你可以google一下。那时候大部分人,都在用ssh(struts, spring, hibernate),不用多说,面试的时候,只要是Java招聘,基本上都要问一些与此相关的问题。所以我不得不去了解一下Spring的框架,但是,在那个时候,我发觉在Spring framework里面早就有一个叫Spring mvc的东西,我就好奇,为什么没有多少人使用?这个不是一个很好的东西吗?当时我觉得这一套的东西可能会是Spring扩大自己在web领域的策略,因为毕竟大部分人在项目中只使用Spring的ioc,依赖注入。对于视图层基本用的是struts。那个时候,如果想做一个漂亮的应用,前端人员要对站点或应用做一些美化的工作,通常都需要后端人员去协助。

当应用越来越复杂,对前端体验要求越来越高的时候,javascript/ajax技术开始火热起来。尤其是google的兴起,推出了对gmail把ajax用得淋漓尽致,并结合了“服务器推”的技术大大节省了服务器的开销。这时候大量的前端框架诞生,比如prototype.js, ext.js, jQuery异军突击。随后就是google 在2010年左右,推出了angular.js,到2014年左右开始流行起来。这个时候,使用struts就会比较麻烦了。前端与后端的协助就比较痛苦。这时候就有人开始使用spring mvc了,但是,配置相当痛苦,一堆的xml需要配置,每改动一次还要重启一次。Spring在2012-2013年左右就开始搞spring boot。没有比较就没有痛苦。相信如果再让你去用这些东西,打死我们也不想用了。因为Spring boot已经把大家的心抓住了。它解决了java程序员很多的痛。

可是,是不是我们做java开发就只能用spring了呢?spring boot是不是很完美了呢?前后端分离真的已经很好了吗?不是。我相信仍然存在很多的问题,只是可能大部的场景/或领域还无法触及得到,比如安全问题、高性能的问题等。这就是为什么一些大的公司只用自己的框架。

所以,我相信技术总是在不断进步的,它一直在跟着我们不断的往前走。不是我们跟着它往前走。

在Spring boot还没有出来的时候,我其实就开始了一个小框架。可惜,因为工作压力大。一直没有时间去开发,最近一年才开始慢慢重启。相信,有一天,它或者也可以成为一个受欢迎的小东西。

https://github.com/tinystruct/tinystruct

总结一句话:每一样技术都是为了解决我们的问题诞生的,我们不能被它牵着走,而是要牵着它往前走。希望对你有用。

技术服务于业务

从13年就放弃spring了 之一直在用国产jfinal 各种项目几乎做了个遍 舒服的很

看你做的是什么 Java不止Spring

如果你做中间件 做编译器 做通讯 做桌面应用 做游戏 做存储 做数值计算 都不需要用到Spring

 

不用spring,可以吗?的更多相关文章

  1. 公司不用 Spring Boot,果断离职了!

    面试问到离职原因,我想这是很多面试者的痛,包括我自己,曾经也被离职原因所坑过. 面试回答离职原因简直特么就是巨坑,我也因此在微信公众号 "Java技术栈" 写了这篇文章<过了 ...

  2. 不用Spring Boot的痛苦是什么?用了Spring Boot以后的好处是什么?

    1.不用Spring Boot的痛苦是什么? (1)各种技术整合在一起,版本混乱,大量依赖自己去找,依赖冲突 (2)基于xml格式的配置文件,对各种技术框架进行大量的繁琐配置,mvc-servlet. ...

  3. 不用 Spring Security 可否?试试这个小而美的安全框架

    写在前面 在一款应用的整个生命周期,我们都会谈及该应用的数据安全问题.用户的合法性与数据的可见性是数据安全中非常重要的一部分.但是,一方面,不同的应用对于数据的合法性和可见性要求的维度与粒度都有所区别 ...

  4. 脱离spring集成cxf(基于nutz框架)

    什么是webService WebService是一种跨编程语言和跨操作系统平台的远程调用技术. 理论资料: http://blog.csdn.net/wooshn/article/details/8 ...

  5. Quartz 在 Spring 中如何动态配置时间--转

    原文地址:http://www.iteye.com/topic/399980 在项目中有一个需求,需要灵活配置调度任务时间,并能自由启动或停止调度. 有关调度的实现我就第一就想到了Quartz这个开源 ...

  6. spring面试题(2)

    f-sp-1. Spring的aop你怎样实现? 用动态代理和cglib实现,有接口的用动态代理,无接口的用cglib f-sp-2. Spring在SSH起什么作用 整合作用 f-sp-3. Spr ...

  7. 初学Spring

    Spring是当今最流行的框架,今天开始,dayday同学要正式开始学习Spring了,加油 以下是一个简单的应用Spring框架的java程序 src\dayday\HelloSpring.java ...

  8. Spring发展历程总结

    目前很多公司的架构,从Struts2迁移到了SpringMVC.你有想过为什么不使用Servlet+JSP来构建Java web项目,而是采用SpringMVC呢? 既然这样,我们从源头说起.Stru ...

  9. 使用spring等框架的web程序在Tomcat下的启动顺序及思路理清

    大牛请绕过,此文仅针对自己小白水平,对web程序的启动流程做个清晰的回顾. 一.使用spring等框架的web程序在Tomcat下的启动流程 1)Tomcat是根据web.xml来启动的.首先到web ...

  10. Spring对Hibernate事务管理

    谈Spring事务管理之前我们想一下在我们不用Spring的时候,在Hibernate中我们是怎么进行数据操作的.在Hibernate中 我们每次进行一个操作的的时候我们都是要先开启事务,然后进行数据 ...

随机推荐

  1. Asp.net core中HttpResponse常用属性及Status code

    在ASP.NET Core中,HttpResponse 表示HTTP响应,其中包括一些常用的属性和方法,用于设置HTTP响应的各种属性.HTTP响应通常由一个HTTP状态码,HTTP头(headers ...

  2. CSS 之overflow属性简结

    CSS的overflow 属性用来处理一个元素的尺寸超出其容器尺寸的情况.当一个元素包含的内容超粗自身的大小时,就会发生内容溢出,这种情况,可以对内容进行"裁剪",只让一部分内容可 ...

  3. manim 动画效果总结

    ManimCE作为一个强大的动画制作框架,它为创作者提供了丰富多样的动画效果,无论是文字.图形还是其他元素,都能通过这些动画效果呈现出生动.有趣的视觉体验. 本文将详细总结ManimCE(v0.19. ...

  4. 测试使用自己编译的WPF框架(本地nuget 包引用)

    上一篇博客 本地编译WPF框架源码 - wuty007 - 博客园 说到自己在本地编译WPF 框架源码,并在本地 源码 的 \wpf\artifacts\packages\Debug\NonShipp ...

  5. python解析xml字符串与xml转json

    一.python解析xml字符串from xml.dom.minidom import parseString xml_str=""" <root> < ...

  6. Postgresql12主备流复制操作过程以及原理【pg_basebackup】

    原理介绍:流复制(Streaming Replication).流复制提供了将 WAL 记录连续发送并应用到从服务器以使其保持最新状态的功能.通过流复制,从服务器不断从主服务器同步相应的数据, 同时, ...

  7. Kubernetes控制器-Job和CronJob

    Job 和 CronJob Deployment, StatefuleSet以及DaemonSet这三个控制器主要编排的对象都是"在线业务",比如我们举例常用的Nginx,MySQ ...

  8. python开发之路【第二章】:python简介和入门

    Python简介 python起源到广泛应用 Python 由吉多・范罗苏姆(Guido van Rossum)缔造.1989 年圣诞季,身处阿姆斯特丹的他,为了打发闲暇时光,决定开发一款新脚本解释程 ...

  9. uniapp- UTS 插件鸿蒙端开发示例 虽然我们这个示例简单 但是这个是难住很多人的一大步

    UTS 插件鸿蒙端开发示例 以上示例已开源 项目地址 请参考 示例代码. 前言 虽然这个 UTS 插件鸿蒙端的示例看起来很简单,但说实话,这一步其实难住了不少开发者.很多人第一次做 UTS 插件,尤其 ...

  10. About me and the blog

    About me and the blog About me 坐标\(CQ\),可以叫我\(Luoyu\)/洛雨/呆猫(似乎混入了奇怪的东西,时常模仿呆猫说话故而得名)/猫老大(???不知道啥时候下一 ...