拥抱Java,拥抱互联网,拥抱未来--Java生态体系一览(上)

Java是一个生态体系,涉及的知识方方面面,从何处入手开讲,是个选择。

Java目前用于企业、互联网的方方面面,也和我们每个人息息相关,常见的应用场景有以下方面:

1、企业应用开发

2、互联网开发

3、大数据

4、安卓开发

5、Socket通信开发

每个应用场景都包含不同的技术,虽然都是java语言,但是除了语法相同外,其余差距较大。


先说企业应用开发,这个简称BS开发,就是浏览器端和服务器端编程。因为现在的企业内部管理系统多数都是BS模式了,还有极个别强业务、强操作的是CS,比如调度系统、视频监控系统等。BS相比CS的好处就是只要有个机器装了浏览器,就可以访问系统,简单方便,而且现在移动端也越来越普及,手机就可以直接使用管理系统,基本做到了移动办公。

当然这个BS的好处是显而易见的,这个好处是针对使用用户的,对开发人员提出来更高的要求。我最早也是做CS开发的,VB、Delphi都很熟悉,也做过不少,做CS开发的好处就是一个人基本能搞定界面设计、逻辑开发、数据库设计等,相对简单一些。但是到了BS,发现变化好多,首先是浏览器的交互方式变了,要求美观方面也变了,以前是能用就行,现在是不光能用,而且要人性化设计。所以出来了UI设计工程师、用户体验工程师,对开发领域做了更大的细分。为了应对这些,我们开发中要学习的东西更多了,不光是逻辑开发、还有界面开发。这两年随着H5的普及,UI技术突飞猛击,我几天不关注,一些新的技术就不懂了。比如Angular,Angular2才出来没几天,Angular4就出来,更可怕的是Angular5正在内测。这些东西大版本升级,很多内部接口都会变,都需要开发人员重新熟悉掌握。常见的后台开发模式是MVC,现在呢,前端也分MVC,而且更细化是MVVM,使用这些模式的框架包括Angular、React、Vue等,不学都不行。


前端说了这么多,再说说后端,这个就更复杂了,开源框架一个接着一个。老外的思想很单纯,我看着这个框架不爽,我就自己写一个,国外的思想是看着不爽,那就凑合用,等有更好的我再换,所以国内的技术比国外还是落后几年的。说后端开发肯定是从MVC说起,最基础的是JSP+Servlet+JavaBean,这一套我用过好多年,除了代码量多一些,不够优雅外,还是基本可以的,简单,基本俩小时就能熟悉上手。没有各种各样的新名词,碰到对象就new。当然这一套应对小系统、功能不复杂、访问量不大的是没问题的,而且好多东西也可以依赖Servlet自带的实现,比如filter、基于timer的定时任务、listener、session等。

控制层

后来Struts1横空出世了,当时是引起轰动的,因为不管是在学校还是在企业,如果会struts,不得了啊,这就是技术高人一等的感觉。我用struts1也做过几个项目,后来就不再用了,原因就是太繁琐了,不管是formbean的配置,还是action里面的代码,繁琐无比,解决的主要问题就是form字段自动封装,其余的好处没发现,可能是做的项目太小。


再后来webwork和struts2出来了,简化了相当多的配置,基本是颠覆struts1,里面引入的好多特性也都非常有用,在开发中最常用的是interceptor、表单标签、action里面表单自动封装,还有后来的注解。整个struts2配置相对简单,如果加上通配符,基本上配置没有太多。struts2.1后引入了注解,基本上就没啥配置了,用的人越来越多,不过遗憾的是,struts2有漏洞,拒绝服务、远程获取服务器权限这都是漏洞引起的后果,相当严重,好多系统都被攻击。引起这个漏洞的原因就是action的参数封装太复杂,就导致黑客高手里面参数拼一些带服务器命令的脚本,来进行攻击。apache是被动防守,有一个漏洞就打一次补丁,最近几年基本没有新特性,完全是打补丁。公司不管大小还是担心被攻击的,所以现在再有新项目,用struts2的也基本没有了,谁也不想还没开发就被扣上架构有缺陷的帽子。

我用struts2大概四年,参与了十多个项目,还是有比较深刻的体会的,确实开发很方便,性能也很不错。但是后来转springMVC了,趋势使然,不可避免。

刚开始转springMVC还不太习惯,不过用了一周后,发现SpringMVC太好用了。设计SpringMVC的人也确实独具慧眼,加上注解的引用,代码写不了几句就能完成大多数controller层的功能。最主要的是和spring无缝衔接,不像struts2还必须有一个struts-for-spring的插件来完成集成。现在基本项目controller都是采用SpringMVC,然后去年出现了SpringBoot,这是后话,以后再讲这个。

持久层


06年那会,Hibernate火起来了,火的原因就是项目开发不用写sql了,解放数据库了,而且兼容各个数据库。我是下过好几次决心要精通hibernate的,无奈确实学习曲线很高,最后还是在11年通过中石化的项目最终精通了,而且是相当精通,原因就是数据库的表设计不合理,全是大表,而且没有主键,两个表之间的关联都是多字段对应。那段时间每天都在研究hibernate的字段映射,多表关联有中间表和无中间表怎么设计,对应的HQL怎么写。当时的Hibernate版本是3.1,还发现了几个多表关联的错误。Hibernate还有一个大坑是JPA1.0和2.0的,Hibernate3.1是实现自己的持久化接口,到3.6版本后改为实现JPA2.0的接口,这个大坑就是WebLogic部署不支持了,和weblogic自带的有冲突,记得有一次项目部署,元旦期间,从白天部署,到凌晨三点还没搞好,最后改成tomcat了。至今想起来就觉得不该采用Hibernate,功能很简单,就是因为Hibernate,耽误太多事。Hibernate火的原因我感觉有以下几个:

1、程序员不用写sql了,这对于数据库不熟悉的人是个福音,但是做开发,如果不精通sql,肯定没发展,所以这并不是好消息。而且如果是复杂sql需要调优,Hibernate基本是无法实现的。

2、写代码可以不用考虑数据库因素了,可以跨数据库了。这个其实是有些自己骗自己的意思。首先至今为止我还没碰到哪个项目初期是用oracle,后期改mysql的,生产中换数据库的场景非常非常少。第二是各个数据库都有各自的特性,如果纯用Hibernate,有些特性是体现不出来的,比如mysql和sqlserver有自增主键,ID直接是AutoIncrement即可,但是Oracle是没有自增主键的,得通过序列来完成,所有ID的生成策略就是加了一个IDGenerator,用Sequence来实现这个自增序列。

3、用Hibernate显得很高端。我问过好多人,项目持久层是用什么做的,他们很骄傲的说Hibernate,然后我问有没有在实体里面实现一对多和多对一的关联关系,然后他们说没有。Hibernate的核心价值就是关联关系,既然没有用,那Hibernate得唯一用途就是简化增删改,并没有起太大作用。

所以现在好多项目基本上不怎么用Hibernate了,主要是学习成本太高,一般人不容易驾驭,如果项目很小,为了快速开发,那可以用Hibernate,如果项目很复杂, 有性能要求,那就最好不要用。

下面说说mybatis吧,这个前身是ibatis,更新比较慢,最新的更新也仅仅是加入了注解,支持通过注解来完成sql的封装,意义不是很大。mybatis的核心是实体的映射和动态sql,优势还是有的,而且互联网公司用的还比较多,好多项目都是ssm框架了。但是通过我的使用,我发现mybatis依然存在不少问题,首先是xml的配置问题,出问题很难发现,尤其是项目里面好多xml的mapper配置文件,如果当中有一个出错了,那就使劲找问题吧,因为报错的地方往往不是那个文件,最后快崩溃才找到原因。第二是动态sql,尤其是拼oracle分页时,尤其复杂,oracle的分页语句不同于mysql,需要两层嵌套,再加入动态查询条件,非常复杂的,最终的可读性就比较低。

再说JDBCTemplate,这也是spring全家桶里面的,基本和mybatis类似,实现的主要功能就是实体和sql的映射,代码写不了几句就能完成大多数dao层的操作,最主要的原因就是能很清晰的看到sql,非常利于开发人员调试。现在市面上比较多的也就是mybatis和JDBCTemplate的比较,有些争议,这个没有定论,哪个熟悉,哪个顺手用哪个,不要套上效率低的帽子,这俩效率基本一致。反正我现在清一色的JDBCTemplate,方便调试sql。


Spring

最后是spring,这个目前没有太多的选择,而且也没有人去质疑该不该用spring。记得在2005年时,好多人还在争论用不用EJB2,后来又除了EJB3,这俩东西我都用过,确实是庞然大物,里面的配置依赖无比繁琐,层层嵌套,想精通这东西确实很难。而且这个加了一个E在里面,就是Enterprise,企业家开发采用的了这东西,普通的小系统根本就别想碰这个。Spring当初的定位是轻量级的开发容器,后来随着Spring用的人越来越多,EJB发现自己根本不是Spring的对手,没有市场了。时至今日,也基本都是Spring在主导这一块,有些独孤求败的意思,很孤独的存在,一直在领跑, 从未被超越。

Spring一统天下的好处是多多的,社区活跃,大牛数不胜数,对Spring体系的贡献也非常多,所以一开始的Spring核心IOC+AOP也慢慢扩展了,包括整合JPA、redis、mongodb、rest、rabbitmq等等,都可以通过spring很简单的整合进来。反正我是受益良多,不用自己写好多代码来保证稳定性。


行了, 上面三个说完就是谈的最多的,整合了,SSH、SSM、SSH2等各种提法,都没有问题,都是成熟的企业开发框架,只要适合团队,能快速开发调试,就是没问题的。我现在提倡的是全Spring系列,即Spring+SpringMVC+JDBCTemplate,不依赖外部,自己实现。这只是建议,具体好坏自己体验便知。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容