擁抱Java么夫,擁抱互聯(lián)網(wǎng)者冤,擁抱未來(lái)--Java生態(tài)體系一覽(上)

Java是一個(gè)生態(tài)體系肤视,涉及的知識(shí)方方面面档痪,從何處入手開講,是個(gè)選擇邢滑。

Java目前用于企業(yè)腐螟、互聯(lián)網(wǎng)的方方面面,也和我們每個(gè)人息息相關(guān)困后,常見的應(yīng)用場(chǎng)景有以下方面:

1乐纸、企業(yè)應(yīng)用開發(fā)

2、互聯(lián)網(wǎng)開發(fā)

3摇予、大數(shù)據(jù)

4汽绢、安卓開發(fā)

5、Socket通信開發(fā)

每個(gè)應(yīng)用場(chǎng)景都包含不同的技術(shù)侧戴,雖然都是java語(yǔ)言宁昭,但是除了語(yǔ)法相同外跌宛,其余差距較大。


先說(shuō)企業(yè)應(yīng)用開發(fā)积仗,這個(gè)簡(jiǎn)稱BS開發(fā)疆拘,就是瀏覽器端和服務(wù)器端編程。因?yàn)楝F(xiàn)在的企業(yè)內(nèi)部管理系統(tǒng)多數(shù)都是BS模式了寂曹,還有極個(gè)別強(qiáng)業(yè)務(wù)哎迄、強(qiáng)操作的是CS,比如調(diào)度系統(tǒng)隆圆、視頻監(jiān)控系統(tǒng)等漱挚。BS相比CS的好處就是只要有個(gè)機(jī)器裝了瀏覽器,就可以訪問(wèn)系統(tǒng)渺氧,簡(jiǎn)單方便棱烂,而且現(xiàn)在移動(dòng)端也越來(lái)越普及,手機(jī)就可以直接使用管理系統(tǒng)阶女,基本做到了移動(dòng)辦公颊糜。

當(dāng)然這個(gè)BS的好處是顯而易見的,這個(gè)好處是針對(duì)使用用戶的秃踩,對(duì)開發(fā)人員提出來(lái)更高的要求衬鱼。我最早也是做CS開發(fā)的,VB憔杨、Delphi都很熟悉鸟赫,也做過(guò)不少,做CS開發(fā)的好處就是一個(gè)人基本能搞定界面設(shè)計(jì)消别、邏輯開發(fā)抛蚤、數(shù)據(jù)庫(kù)設(shè)計(jì)等,相對(duì)簡(jiǎn)單一些寻狂。但是到了BS岁经,發(fā)現(xiàn)變化好多,首先是瀏覽器的交互方式變了蛇券,要求美觀方面也變了缀壤,以前是能用就行,現(xiàn)在是不光能用纠亚,而且要人性化設(shè)計(jì)塘慕。所以出來(lái)了UI設(shè)計(jì)工程師、用戶體驗(yàn)工程師蒂胞,對(duì)開發(fā)領(lǐng)域做了更大的細(xì)分图呢。為了應(yīng)對(duì)這些,我們開發(fā)中要學(xué)習(xí)的東西更多了,不光是邏輯開發(fā)蛤织、還有界面開發(fā)拥娄。這兩年隨著H5的普及,UI技術(shù)突飛猛擊瞳筏,我?guī)滋觳魂P(guān)注稚瘾,一些新的技術(shù)就不懂了。比如Angular姚炕,Angular2才出來(lái)沒(méi)幾天摊欠,Angular4就出來(lái),更可怕的是Angular5正在內(nèi)測(cè)柱宦。這些東西大版本升級(jí)些椒,很多內(nèi)部接口都會(huì)變,都需要開發(fā)人員重新熟悉掌握掸刊。常見的后臺(tái)開發(fā)模式是MVC免糕,現(xiàn)在呢,前端也分MVC忧侧,而且更細(xì)化是MVVM石窑,使用這些模式的框架包括Angular、React蚓炬、Vue等松逊,不學(xué)都不行。


前端說(shuō)了這么多肯夏,再說(shuō)說(shuō)后端经宏,這個(gè)就更復(fù)雜了,開源框架一個(gè)接著一個(gè)驯击。老外的思想很單純烁兰,我看著這個(gè)框架不爽,我就自己寫一個(gè)徊都,國(guó)外的思想是看著不爽沪斟,那就湊合用,等有更好的我再換碟贾,所以國(guó)內(nèi)的技術(shù)比國(guó)外還是落后幾年的币喧。說(shuō)后端開發(fā)肯定是從MVC說(shuō)起轨域,最基礎(chǔ)的是JSP+Servlet+JavaBean袱耽,這一套我用過(guò)好多年,除了代碼量多一些干发,不夠優(yōu)雅外朱巨,還是基本可以的,簡(jiǎn)單枉长,基本倆小時(shí)就能熟悉上手冀续。沒(méi)有各種各樣的新名詞琼讽,碰到對(duì)象就new。當(dāng)然這一套應(yīng)對(duì)小系統(tǒng)洪唐、功能不復(fù)雜钻蹬、訪問(wèn)量不大的是沒(méi)問(wèn)題的,而且好多東西也可以依賴Servlet自帶的實(shí)現(xiàn)凭需,比如filter问欠、基于timer的定時(shí)任務(wù)、listener粒蜈、session等顺献。

控制層

后來(lái)Struts1橫空出世了,當(dāng)時(shí)是引起轟動(dòng)的枯怖,因?yàn)椴还苁窃趯W(xué)校還是在企業(yè)注整,如果會(huì)struts,不得了啊度硝,這就是技術(shù)高人一等的感覺(jué)肿轨。我用struts1也做過(guò)幾個(gè)項(xiàng)目,后來(lái)就不再用了蕊程,原因就是太繁瑣了萝招,不管是formbean的配置,還是action里面的代碼存捺,繁瑣無(wú)比槐沼,解決的主要問(wèn)題就是form字段自動(dòng)封裝,其余的好處沒(méi)發(fā)現(xiàn)捌治,可能是做的項(xiàng)目太小岗钩。


再后來(lái)webwork和struts2出來(lái)了,簡(jiǎn)化了相當(dāng)多的配置肖油,基本是顛覆struts1兼吓,里面引入的好多特性也都非常有用,在開發(fā)中最常用的是interceptor森枪、表單標(biāo)簽视搏、action里面表單自動(dòng)封裝,還有后來(lái)的注解县袱。整個(gè)struts2配置相對(duì)簡(jiǎn)單浑娜,如果加上通配符,基本上配置沒(méi)有太多式散。struts2.1后引入了注解筋遭,基本上就沒(méi)啥配置了,用的人越來(lái)越多,不過(guò)遺憾的是漓滔,struts2有漏洞编饺,拒絕服務(wù)、遠(yuǎn)程獲取服務(wù)器權(quán)限這都是漏洞引起的后果响驴,相當(dāng)嚴(yán)重透且,好多系統(tǒng)都被攻擊。引起這個(gè)漏洞的原因就是action的參數(shù)封裝太復(fù)雜豁鲤,就導(dǎo)致黑客高手里面參數(shù)拼一些帶服務(wù)器命令的腳本石蔗,來(lái)進(jìn)行攻擊。apache是被動(dòng)防守畅形,有一個(gè)漏洞就打一次補(bǔ)丁养距,最近幾年基本沒(méi)有新特性,完全是打補(bǔ)丁日熬。公司不管大小還是擔(dān)心被攻擊的棍厌,所以現(xiàn)在再有新項(xiàng)目,用struts2的也基本沒(méi)有了竖席,誰(shuí)也不想還沒(méi)開發(fā)就被扣上架構(gòu)有缺陷的帽子耘纱。

我用struts2大概四年,參與了十多個(gè)項(xiàng)目毕荐,還是有比較深刻的體會(huì)的束析,確實(shí)開發(fā)很方便,性能也很不錯(cuò)憎亚。但是后來(lái)轉(zhuǎn)springMVC了员寇,趨勢(shì)使然,不可避免第美。

剛開始轉(zhuǎn)springMVC還不太習(xí)慣蝶锋,不過(guò)用了一周后,發(fā)現(xiàn)SpringMVC太好用了什往。設(shè)計(jì)SpringMVC的人也確實(shí)獨(dú)具慧眼扳缕,加上注解的引用,代碼寫不了幾句就能完成大多數(shù)controller層的功能别威。最主要的是和spring無(wú)縫銜接躯舔,不像struts2還必須有一個(gè)struts-for-spring的插件來(lái)完成集成。現(xiàn)在基本項(xiàng)目controller都是采用SpringMVC省古,然后去年出現(xiàn)了SpringBoot粥庄,這是后話,以后再講這個(gè)衫樊。

持久層


06年那會(huì)飒赃,Hibernate火起來(lái)了利花,火的原因就是項(xiàng)目開發(fā)不用寫sql了科侈,解放數(shù)據(jù)庫(kù)了载佳,而且兼容各個(gè)數(shù)據(jù)庫(kù)。我是下過(guò)好幾次決心要精通hibernate的臀栈,無(wú)奈確實(shí)學(xué)習(xí)曲線很高蔫慧,最后還是在11年通過(guò)中石化的項(xiàng)目最終精通了,而且是相當(dāng)精通权薯,原因就是數(shù)據(jù)庫(kù)的表設(shè)計(jì)不合理姑躲,全是大表,而且沒(méi)有主鍵盟蚣,兩個(gè)表之間的關(guān)聯(lián)都是多字段對(duì)應(yīng)黍析。那段時(shí)間每天都在研究hibernate的字段映射,多表關(guān)聯(lián)有中間表和無(wú)中間表怎么設(shè)計(jì)屎开,對(duì)應(yīng)的HQL怎么寫阐枣。當(dāng)時(shí)的Hibernate版本是3.1,還發(fā)現(xiàn)了幾個(gè)多表關(guān)聯(lián)的錯(cuò)誤奄抽。Hibernate還有一個(gè)大坑是JPA1.0和2.0的蔼两,Hibernate3.1是實(shí)現(xiàn)自己的持久化接口,到3.6版本后改為實(shí)現(xiàn)JPA2.0的接口逞度,這個(gè)大坑就是WebLogic部署不支持了额划,和weblogic自帶的有沖突,記得有一次項(xiàng)目部署档泽,元旦期間俊戳,從白天部署,到凌晨三點(diǎn)還沒(méi)搞好馆匿,最后改成tomcat了品抽。至今想起來(lái)就覺(jué)得不該采用Hibernate,功能很簡(jiǎn)單甜熔,就是因?yàn)镠ibernate圆恤,耽誤太多事。Hibernate火的原因我感覺(jué)有以下幾個(gè):

1腔稀、程序員不用寫sql了盆昙,這對(duì)于數(shù)據(jù)庫(kù)不熟悉的人是個(gè)福音,但是做開發(fā)焊虏,如果不精通sql淡喜,肯定沒(méi)發(fā)展,所以這并不是好消息诵闭。而且如果是復(fù)雜sql需要調(diào)優(yōu)炼团,Hibernate基本是無(wú)法實(shí)現(xiàn)的澎嚣。

2、寫代碼可以不用考慮數(shù)據(jù)庫(kù)因素了瘟芝,可以跨數(shù)據(jù)庫(kù)了易桃。這個(gè)其實(shí)是有些自己騙自己的意思。首先至今為止我還沒(méi)碰到哪個(gè)項(xiàng)目初期是用oracle锌俱,后期改mysql的晤郑,生產(chǎn)中換數(shù)據(jù)庫(kù)的場(chǎng)景非常非常少。第二是各個(gè)數(shù)據(jù)庫(kù)都有各自的特性贸宏,如果純用Hibernate造寝,有些特性是體現(xiàn)不出來(lái)的,比如mysql和sqlserver有自增主鍵吭练,ID直接是AutoIncrement即可诫龙,但是Oracle是沒(méi)有自增主鍵的,得通過(guò)序列來(lái)完成鲫咽,所有ID的生成策略就是加了一個(gè)IDGenerator签赃,用Sequence來(lái)實(shí)現(xiàn)這個(gè)自增序列。

3浑侥、用Hibernate顯得很高端姊舵。我問(wèn)過(guò)好多人,項(xiàng)目持久層是用什么做的寓落,他們很驕傲的說(shuō)Hibernate括丁,然后我問(wèn)有沒(méi)有在實(shí)體里面實(shí)現(xiàn)一對(duì)多和多對(duì)一的關(guān)聯(lián)關(guān)系,然后他們說(shuō)沒(méi)有伶选。Hibernate的核心價(jià)值就是關(guān)聯(lián)關(guān)系史飞,既然沒(méi)有用,那Hibernate得唯一用途就是簡(jiǎn)化增刪改仰税,并沒(méi)有起太大作用构资。

所以現(xiàn)在好多項(xiàng)目基本上不怎么用Hibernate了,主要是學(xué)習(xí)成本太高陨簇,一般人不容易駕馭吐绵,如果項(xiàng)目很小,為了快速開發(fā)河绽,那可以用Hibernate己单,如果項(xiàng)目很復(fù)雜, 有性能要求耙饰,那就最好不要用纹笼。

下面說(shuō)說(shuō)mybatis吧,這個(gè)前身是ibatis苟跪,更新比較慢廷痘,最新的更新也僅僅是加入了注解蔓涧,支持通過(guò)注解來(lái)完成sql的封裝,意義不是很大笋额。mybatis的核心是實(shí)體的映射和動(dòng)態(tài)sql元暴,優(yōu)勢(shì)還是有的,而且互聯(lián)網(wǎng)公司用的還比較多鳞陨,好多項(xiàng)目都是ssm框架了昨寞。但是通過(guò)我的使用瞻惋,我發(fā)現(xiàn)mybatis依然存在不少問(wèn)題厦滤,首先是xml的配置問(wèn)題,出問(wèn)題很難發(fā)現(xiàn)歼狼,尤其是項(xiàng)目里面好多xml的mapper配置文件掏导,如果當(dāng)中有一個(gè)出錯(cuò)了,那就使勁找問(wèn)題吧羽峰,因?yàn)閳?bào)錯(cuò)的地方往往不是那個(gè)文件趟咆,最后快崩潰才找到原因。第二是動(dòng)態(tài)sql梅屉,尤其是拼oracle分頁(yè)時(shí)值纱,尤其復(fù)雜,oracle的分頁(yè)語(yǔ)句不同于mysql坯汤,需要兩層嵌套虐唠,再加入動(dòng)態(tài)查詢條件,非常復(fù)雜的惰聂,最終的可讀性就比較低疆偿。

再說(shuō)JDBCTemplate,這也是spring全家桶里面的搓幌,基本和mybatis類似杆故,實(shí)現(xiàn)的主要功能就是實(shí)體和sql的映射,代碼寫不了幾句就能完成大多數(shù)dao層的操作溉愁,最主要的原因就是能很清晰的看到sql处铛,非常利于開發(fā)人員調(diào)試。現(xiàn)在市面上比較多的也就是mybatis和JDBCTemplate的比較拐揭,有些爭(zhēng)議撤蟆,這個(gè)沒(méi)有定論,哪個(gè)熟悉投队,哪個(gè)順手用哪個(gè)枫疆,不要套上效率低的帽子,這倆效率基本一致敷鸦。反正我現(xiàn)在清一色的JDBCTemplate息楔,方便調(diào)試sql寝贡。


Spring

最后是spring,這個(gè)目前沒(méi)有太多的選擇值依,而且也沒(méi)有人去質(zhì)疑該不該用spring圃泡。記得在2005年時(shí),好多人還在爭(zhēng)論用不用EJB2愿险,后來(lái)又除了EJB3颇蜡,這倆東西我都用過(guò),確實(shí)是龐然大物辆亏,里面的配置依賴無(wú)比繁瑣风秤,層層嵌套,想精通這東西確實(shí)很難扮叨。而且這個(gè)加了一個(gè)E在里面缤弦,就是Enterprise,企業(yè)家開發(fā)采用的了這東西彻磁,普通的小系統(tǒng)根本就別想碰這個(gè)碍沐。Spring當(dāng)初的定位是輕量級(jí)的開發(fā)容器,后來(lái)隨著Spring用的人越來(lái)越多衷蜓,EJB發(fā)現(xiàn)自己根本不是Spring的對(duì)手累提,沒(méi)有市場(chǎng)了。時(shí)至今日磁浇,也基本都是Spring在主導(dǎo)這一塊斋陪,有些獨(dú)孤求敗的意思,很孤獨(dú)的存在扯夭,一直在領(lǐng)跑鳍贾, 從未被超越。

Spring一統(tǒng)天下的好處是多多的交洗,社區(qū)活躍骑科,大牛數(shù)不勝數(shù),對(duì)Spring體系的貢獻(xiàn)也非常多构拳,所以一開始的Spring核心IOC+AOP也慢慢擴(kuò)展了咆爽,包括整合JPA、redis置森、mongodb斗埂、rest、rabbitmq等等凫海,都可以通過(guò)spring很簡(jiǎn)單的整合進(jìn)來(lái)呛凶。反正我是受益良多,不用自己寫好多代碼來(lái)保證穩(wěn)定性行贪。


行了漾稀, 上面三個(gè)說(shuō)完就是談的最多的模闲,整合了,SSH崭捍、SSM尸折、SSH2等各種提法,都沒(méi)有問(wèn)題殷蛇,都是成熟的企業(yè)開發(fā)框架实夹,只要適合團(tuán)隊(duì),能快速開發(fā)調(diào)試粒梦,就是沒(méi)問(wèn)題的亮航。我現(xiàn)在提倡的是全Spring系列,即Spring+SpringMVC+JDBCTemplate谍倦,不依賴外部塞赂,自己實(shí)現(xiàn)泪勒。這只是建議昼蛀,具體好壞自己體驗(yàn)便知。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末圆存,一起剝皮案震驚了整個(gè)濱河市叼旋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌沦辙,老刑警劉巖夫植,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異油讯,居然都是意外死亡详民,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門陌兑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)沈跨,“玉大人,你說(shuō)我怎么就攤上這事兔综《隽荩” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵软驰,是天一觀的道長(zhǎng)涧窒。 經(jīng)常有香客問(wèn)我,道長(zhǎng)锭亏,這世上最難降的妖魔是什么纠吴? 我笑而不...
    開封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮慧瘤,結(jié)果婚禮上戴已,老公的妹妹穿的比我還像新娘膳凝。我一直安慰自己,他們只是感情好恭陡,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開白布蹬音。 她就那樣靜靜地躺著,像睡著了一般休玩。 火紅的嫁衣襯著肌膚如雪著淆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天拴疤,我揣著相機(jī)與錄音永部,去河邊找鬼。 笑死呐矾,一個(gè)胖子當(dāng)著我的面吹牛苔埋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蜒犯,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼组橄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了罚随?” 一聲冷哼從身側(cè)響起玉工,我...
    開封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎淘菩,沒(méi)想到半個(gè)月后遵班,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡潮改,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年狭郑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片汇在。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡翰萨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出趾疚,到底是詐尸還是另有隱情缨历,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布糙麦,位于F島的核電站辛孵,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏赡磅。R本人自食惡果不足惜魄缚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧冶匹,春花似錦习劫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至飞蛹,卻和暖如春谤狡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背卧檐。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工墓懂, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人霉囚。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓捕仔,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親盈罐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子榜跌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法暖呕,內(nèi)部類的語(yǔ)法斜做,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法湾揽,線程的語(yǔ)...
    子非魚_t_閱讀 31,665評(píng)論 18 399
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 3,815評(píng)論 0 11
  • spring mvc 工作機(jī)制(原理): DispatcherServlet主要用作職責(zé)調(diào)度工作,本身主要用于控制...
    java大濕兄閱讀 1,899評(píng)論 5 24
  • 在消費(fèi)主義盛行的時(shí)代戚揭,一切事物都可以用來(lái)消費(fèi),月光族這個(gè)群體越來(lái)越龐大撵枢。 移除 點(diǎn)擊此處添加圖片說(shuō)明文字 請(qǐng)點(diǎn)擊此...
    小Z說(shuō)道閱讀 343評(píng)論 0 0
  • 昨天換了新眼鏡民晒,是家人介紹的熟人店。我從未見過(guò)如此專業(yè)的配鏡師锄禽,也沒(méi)見過(guò)那臺(tái)如此高科技的驗(yàn)鏡設(shè)備潜必。也許是已經(jīng)跟家人...
    一只小猴子的猴子?jì)寢?/span>閱讀 524評(píng)論 1 2