成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

高手支招 Java經(jīng)驗(yàn)分享(十一)

開(kāi)發(fā) 后端
本篇文章是作者Ant_Yan在CSDN論壇上發(fā)布的自己對(duì)Java學(xué)習(xí)的一些經(jīng)驗(yàn)分享。這是他經(jīng)驗(yàn)分享的第十一部分。

  這篇文章,筆者繼續(xù)與大家分享Java學(xué)習(xí)經(jīng)驗(yàn)。今天的主題是目前很流行也很好的一個(gè)開(kāi)源框架-Spring。

  引用《Spring2.0技術(shù)手冊(cè)》上的一段話(huà):

  Spring的核心是個(gè)輕量級(jí)容器,它是實(shí)現(xiàn)IoC容器和非侵入性的框架,并提供AOP概念的實(shí)現(xiàn)方式;提供對(duì)持久層、事務(wù)的支持;提供MVC Web框架的實(shí)現(xiàn),并對(duì)于一些常用的企業(yè)服務(wù)API提供一致的模型封裝,是一個(gè)全方位的應(yīng)用程序框架,除此之外,對(duì)于現(xiàn)存的各種框架,Spring也提供了與它們相整合的方案。

  接下來(lái)筆者先談?wù)勛约旱囊恍├斫獍?,Spring框架的發(fā)起者之前一本很著名的書(shū)名字大概是《J2ee Development without EJB》,他提倡用輕量級(jí)的組件代替重量級(jí)的EJB。筆者還沒(méi)有看完那本著作,只閱讀了部分章節(jié)。其中有一點(diǎn)分析覺(jué)得是很有道理的:

  EJB里在服務(wù)器端有Web Container和EJB Container,從前的觀點(diǎn)是各層之間應(yīng)該在物理上隔離,Web Container處理視圖功能、在EJB Container中處理業(yè)務(wù)邏輯功能、然后也是EBJ Container控制數(shù)據(jù)庫(kù)持久化。這樣的層次是很清晰,但是一個(gè)很?chē)?yán)重的問(wèn)題是Web Container和EJB Container畢竟是兩個(gè)不同的容器,它們之間要通信就得用的是RMI機(jī)制和JNDI服務(wù),同樣都在服務(wù)端,卻物理上隔離,而且每次業(yè)務(wù)請(qǐng)求都要遠(yuǎn)程調(diào)用,有沒(méi)有必要呢?看來(lái)并非隔離都是好的。

  再看看輕量級(jí)和重量級(jí)的區(qū)別,筆者看過(guò)很多種說(shuō)法,覺(jué)得最有道理的是輕量級(jí)代表是POJO + IoC,重量級(jí)的代表是Container + Factory。(EJB2.0是典型的重量級(jí)組件的技術(shù))我們盡量使用輕量級(jí)的Pojo很好理解,意義就在于兼容性和可適應(yīng)性,移植不需要改變?cè)瓉?lái)的代碼。而Ioc與Factory比起來(lái),Ioc的優(yōu)點(diǎn)是更大的靈活性,通過(guò)配置可以控制很多注入的細(xì)節(jié),而Factory模式,行為是相對(duì)比較封閉固定的,生產(chǎn)一個(gè)對(duì)象就必須接受它全部的特點(diǎn),不管是否需要。其實(shí)輕量級(jí)和重量級(jí)都是相對(duì)的概念,使用資源更少、運(yùn)行負(fù)載更小的自然就算輕量。

  話(huà)題扯遠(yuǎn)了,因?yàn)镾pring框架帶來(lái)了太多可以探討的地方。比如它的非侵入性:指的是它提供的框架實(shí)現(xiàn)可以讓程序員編程卻感覺(jué)不到框架的存在,這樣所寫(xiě)的代碼并沒(méi)有和框架綁定在一起,可以隨時(shí)抽離出來(lái),這也是Spring設(shè)計(jì)的目標(biāo)。Spring是唯一可以做到真正的針對(duì)接口編程,處處都是接口,不依賴(lài)綁定任何實(shí)現(xiàn)類(lèi)。同時(shí),Spring還設(shè)計(jì)了自己的事務(wù)管理、對(duì)象管理和Model2 的MVC框架,還封裝了其他J2ee的服務(wù)在里面,在實(shí)現(xiàn)上基本都在使用依賴(lài)注入和AOP的思想。由此我們大概可以看到Spring是一個(gè)什么概念上的框架,代表了很多優(yōu)秀思想,值得深入學(xué)習(xí)。筆者強(qiáng)調(diào),學(xué)習(xí)并不是框架,而是框架代表的思想,就像我們當(dāng)初學(xué)Struts一樣……

  1.Spring MVC

  關(guān)于IoC和AOP筆者在上篇已經(jīng)稍微解釋過(guò)了,這里先通過(guò)Spring的MVC框架來(lái)給大家探討一下Spring的特點(diǎn)吧。(畢竟大部分人已經(jīng)很熟悉Struts了,對(duì)比一下吧)

  眾所周知MVC的核心是控制器。類(lèi)似Struts中的ActionServlet,Spring里面前端控制器叫做DispatcherServlet。里面充當(dāng)Action的組件叫做Controller,返回的視圖層對(duì)象叫做ModelAndView,提交和返回都可能要經(jīng)過(guò)過(guò)濾的組件叫做Interceptor。

  讓我們看看一個(gè)從請(qǐng)求到返回的流程吧:

  (1) 前臺(tái)Jsp或Html通過(guò)點(diǎn)擊submit,將數(shù)據(jù)裝入了request域

  (2) 請(qǐng)求被Interceptor攔截下來(lái),執(zhí)行preHandler()方法出前置判斷

  (3) 請(qǐng)求到達(dá)DispathcerServlet

  (4) DispathcerServlet通過(guò)Handler Mapping來(lái)決定每個(gè)reuqest應(yīng)該轉(zhuǎn)發(fā)給哪個(gè)后端控制器Controller

  (5) 各式各樣的后端控制器Controller來(lái)處理請(qǐng)求,調(diào)用業(yè)務(wù)層對(duì)象來(lái)處理業(yè)務(wù)邏輯,然后返回一個(gè)ModelAndView對(duì)象

  (6) 當(dāng)Controller執(zhí)行完畢,Interceptor會(huì)調(diào)用postHandle來(lái)做后置處理

  (7) ModelAndView代表了呈現(xiàn)畫(huà)面是使用的Model數(shù)據(jù)對(duì)象和View對(duì)象,由于只能返回一個(gè)對(duì)象所有起了這個(gè)名字封裝這兩個(gè)對(duì)象。

  (8) 由ViewResolver對(duì)象來(lái)解析每個(gè)返回的ModelAndView對(duì)象應(yīng)該呈現(xiàn)到哪一個(gè)視圖(Jsp/Html等)中(包括Exception Resolver)

  (9) 當(dāng)View繪制完成之后Interceptor又會(huì)跳出來(lái)執(zhí)行它的afterCompletion方法做善后處理。當(dāng)然Interceptor的行為完全是配置的而不是強(qiáng)制的。

  這樣一個(gè)完整的流程就這樣結(jié)束了,個(gè)人感覺(jué)Spring的MVC框架稍顯復(fù)雜,不像Struts-1那么容易上手。不管是Controller、Model、ViewRosovler、Handle Mapping還是View,Spring MVC框架都已經(jīng)為你提供了多種實(shí)現(xiàn),想最大程度的減少程序員的編碼,增加框架的適用性。大家有興趣可以繼續(xù)深入研究哈!

  2.Spring AOP

  記得最初筆者請(qǐng)教他人Spring是一個(gè)什么東西的時(shí)候,每個(gè)人都會(huì)提到AOP這個(gè)詞語(yǔ)。筆者在上一篇已經(jīng)解釋過(guò)AOP基本原理,這次來(lái)跟大家說(shuō)說(shuō)Spring的AOP編程吧。不同的AOP框架會(huì)有其對(duì)AOP概念不同的實(shí)現(xiàn)方式,主要的差別在于所提供的Pointcut、Aspects的豐富程度,以及它們?nèi)绾伪豢椚霊?yīng)用程序、代理的方式等等。先熟悉一下AOP中的幾個(gè)重要概念:

  (1) Cross-cutting:橫切,說(shuō)白了就是需要統(tǒng)一處理的集合

  (2) Aspects:將散落各處的橫切收集起來(lái),設(shè)計(jì)成各個(gè)獨(dú)立可重用的對(duì)象稱(chēng)為Aspects。

  (3) Advice: 對(duì)橫切的具體實(shí)現(xiàn),即等待插入一段邏輯。

  (4) Joinpoint:Advice插入流程的時(shí)機(jī)點(diǎn)。

  (5) Pointcut: 用于選擇Joinpoint的程序結(jié)構(gòu),可以通過(guò)Annotation或者XML實(shí)現(xiàn)。

  (6) Weave: Advice被應(yīng)用至對(duì)象之上的過(guò)程稱(chēng)之為織入,有編譯期、類(lèi)加載期、運(yùn)行期三種時(shí)間點(diǎn)策略。

  如果你采用實(shí)現(xiàn)接口的方式,Spring會(huì)在執(zhí)行時(shí)期適用java的動(dòng)態(tài)代理,如果不實(shí)現(xiàn)接口,Spring會(huì)使用CGLIB產(chǎn)生代理類(lèi)。AOP的概念很大很泛,而Spring只使用了其中的部分特性,畢竟Spring的目標(biāo)是輕量級(jí)框架,比如它只支持對(duì)Method的Joinpoint,而不支持對(duì)Field的Joinpoint,理由是為了封裝性。

  其實(shí)我們可以把概念看得簡(jiǎn)單一點(diǎn),AOP的目的是減少冗余代碼,增強(qiáng)對(duì)較大項(xiàng)目的全局監(jiān)控。Spring利用AOP可以規(guī)定一個(gè)集合和一套規(guī)則,在這個(gè)集合里所有的方法被invoke即調(diào)用的時(shí)候,都必須按照那套規(guī)則走一遍。那么首先對(duì)其中10個(gè)方法都要用到的處理代碼就只用寫(xiě)一遍,如果是這10個(gè)方法來(lái)了就織入這段代碼;其次,按照規(guī)則,也許所有的牽扯某個(gè)模塊的方法調(diào)用的時(shí)候,我都需要做日志或者進(jìn)行驗(yàn)證,那么我只要立足于這個(gè)集合的入口和出口,管他從哪里來(lái)去哪里,都能被有效的監(jiān)控。我監(jiān)控的可能不止是某個(gè)方法單獨(dú)的行為,我還可以加入對(duì)流程控制的監(jiān)控規(guī)則。例如是論壇,我規(guī)定注冊(cè)了才能登錄,而登錄后才能發(fā)帖回帖下資源,于是所有這類(lèi)流程都會(huì)被收集到我眼皮地下通過(guò)。

  PS:筆者最近只是接觸Spring的MVC比較多,對(duì)于Spring的其他特性,還沒(méi)有更多的去實(shí)踐,所以?xún)H僅是泛泛而談,只是介紹一個(gè)印象罷了。還是那句話(huà),我們學(xué)習(xí)一個(gè)框架不是如何使用,而是它所帶來(lái)的優(yōu)秀的思想和理念,這比如何使用這個(gè)框架更有意義得多。

【編輯推薦】

  1. 新手入門(mén):學(xué)習(xí)Java的一點(diǎn)經(jīng)驗(yàn)心得
  2. 61條Java面向?qū)ο笤O(shè)計(jì)的經(jīng)驗(yàn)原則
  3. 經(jīng)驗(yàn)分享:我的JavaEE學(xué)習(xí)道路
  4. Java對(duì)象類(lèi)型轉(zhuǎn)換的四個(gè)經(jīng)驗(yàn)
  5. 高手支招 Java經(jīng)驗(yàn)分享(一)
責(zé)任編輯:韓亞珊 來(lái)源: CSDN
相關(guān)推薦

2011-03-31 13:52:22

Java

2011-03-31 16:26:28

Java

2011-03-31 13:32:13

Java

2011-03-31 13:56:24

Java

2011-03-31 14:07:27

Java

2011-03-31 14:49:35

2011-03-31 15:36:02

Java

2011-03-31 16:49:40

Java

2011-04-07 13:18:00

管理軟件項(xiàng)目項(xiàng)目

2009-10-29 16:57:05

Oracle傳輸表空間

2014-05-28 10:55:11

Windows XP安全補(bǔ)丁

2010-07-21 14:05:31

2018-06-19 08:12:55

2010-08-18 14:19:01

無(wú)線(xiàn)路由器

2009-09-28 10:52:00

CCNA考試經(jīng)驗(yàn)CCNA

2014-11-11 10:25:52

2009-12-07 11:11:46

PHP顯示圖片

2009-12-16 16:37:59

Ruby on Rai

2009-12-25 09:44:52

WPF窗口設(shè)置

2009-10-15 10:59:00

CCNA經(jīng)驗(yàn)分享CCNA
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 日韩免费 | 精品国产青草久久久久福利 | 国产伦一区二区三区久久 | 国产精品久久久久久 | av先锋资源 | 国产精品日韩一区 | 一a一片一级一片啪啪 | 亚洲国产一区视频 | 国产黄色一级电影 | 天天操夜夜操 | 天天躁日日躁狠狠躁2018小说 | 中文字幕视频在线观看 | 国产清纯白嫩初高生在线播放视频 | 久久蜜桃av一区二区天堂 | 一区影视| 国产精品久久久久久久岛一牛影视 | 日韩一区二区三区视频 | 精品视频一区二区三区在线观看 | 超碰免费在线 | 日韩精品在线一区二区 | 国产精品2区 | 久久成人免费视频 | 最新超碰| 国产激情一区二区三区 | 天堂免费 | 99re热这里只有精品视频 | 欧美日韩一二三区 | 91在线看 | 91精品国产高清久久久久久久久 | 亚洲一区免费在线 | 久久大香 | 欧美日韩国产三级 | 亚洲精品在线观看网站 | 欧美日韩淫片 | 一区二区三区在线观看视频 | 日韩一区二区三区在线播放 | 亚洲精品短视频 | 国产成人一区二 | 欧美激情国产精品 | 欧美激情久久久 | 欧美乱做爰xxxⅹ久久久 |