日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

spring(1)Spring之旅

發(fā)布時間:2023/12/3 javascript 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring(1)Spring之旅 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
【0】README 0.1)本文部分文字描述轉(zhuǎn)自:“Spring In Action(中/英文版),旨在reviewSpring(1)Spring之旅 的相關(guān)知識;
【1】簡化java 開發(fā) 1)為了降低java開發(fā)的復(fù)雜性,Spring采取了以下4種關(guān)鍵策略(strategy): s1)基于POJO的輕量級和最小侵入性編程;(POJO == plain ordinary java object,簡單java對象 == 普通javabean) s2)通過依賴注入和面向接口實現(xiàn)松耦合; s3)基于切面和慣例進行聲明式編程; s4)通過切面和模板減少樣板式代碼;
【1.2】依賴注入(Dependency Injection==DI) 1)耦合具有兩面性: 1.1)一方面:緊密耦合的代碼難以測試,難以復(fù)用,難以理解,并且典型地表現(xiàn)出打地鼠式的bug特性(修復(fù)一個bug,將會出現(xiàn)一個或更多新的bug);(干貨——新貴詞匯——打地鼠式的bug特性 1.2)另一方面:一定程度的耦合又是必須的——完全沒有耦合的代碼什么都做不了;(總而言之,耦合是必須的,但應(yīng)該被小心謹慎地管理); 2)通過DI,對象的依賴關(guān)系將由系統(tǒng)中負責協(xié)調(diào)各對象的第三方組件在創(chuàng)建對象的時候進行設(shè)定;
3)這就是DI所帶來的最大收益——松耦合。如果一個對象只通過接口(而不是具體實現(xiàn)或初始化過程)來表明依賴關(guān)系,那么這種依賴就能夠在對象本身毫不知情的case下,用不同的具體實現(xiàn)進行替換;(干貨——DI所帶來的最大收益——松耦合) 4)創(chuàng)建應(yīng)用組件之間協(xié)作的行為通常稱為裝配:Spring有多種裝配bean 的方式,采用XML 是很常見的一種裝配方式,也可以使用 java 來描述配置;(干貨——裝配的定義) 5)Spring通過應(yīng)用上下文裝置bean的定義并把他們組裝起來。Spring應(yīng)用上下文全權(quán)負責對象的創(chuàng)建和組裝。Spring自帶了多種應(yīng)用上下文的實現(xiàn),它們之間的主要區(qū)別僅僅在于 如何加載配置;
【1.3】應(yīng)用切面 1)DI 能夠讓相互協(xié)作的軟件組件保持松散耦合,而面向切面編程(AOP)允許你把遍布應(yīng)用各處的功能分離出來形成可重用的組件;(干貨——面向切面編程的定義) 2)面向切面編程往往被定義:為促使軟件系統(tǒng)實現(xiàn)關(guān)注點的分離一項技術(shù)。系統(tǒng)由許多不同的組件組成,每一個組件各負責一塊特定功能。除了實現(xiàn)自身核心的功能之外,這些組件還經(jīng)常承擔額外的職責。諸如日志,事務(wù)管理和安全這樣的系統(tǒng)服務(wù)經(jīng)常融入到自身具有核心業(yè)務(wù)邏輯的組件中去,這些系統(tǒng)服務(wù)通常被稱為橫切關(guān)注點,因為他們會跨越系統(tǒng)的多個組件;(干貨——橫切關(guān)注點的定義) 3)AOP能夠使這些服務(wù)模塊化,并以聲明的方式將它們應(yīng)用到他們需要影響的組件中去。所造成的結(jié)果就是這些組件會具有更高的內(nèi)聚性并且會更加關(guān)注自身的業(yè)務(wù),完全不需要了解涉及系統(tǒng)服務(wù)所帶來復(fù)雜性。總之,AOP 能夠確保POJO的簡單性; 4)看個荔枝:(本小姐末有輔助圖說明) 4.0)相關(guān)源碼 public class KnightMain {public static void main(String[] args) throws Exception {String dir = System.getProperty("user.dir") + File.separator + "META-INF" + File.separator;FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext(dir+"knight.xml");Knight knight = context.getBean(Knight.class);knight.embarkOnQuest();context.close();} } 對以上代碼的分析(Analysis): A1)使用FileSystemXmlApplicationContext ?和 使用 ClassPathXmlApplicaitonContext的區(qū)別在于:FileSystemXmlApplicationContext 在指定的文件系統(tǒng)路徑下查找 knight.xml 文件,而 ClassPathXmlApplicationContext 是所有的類路徑(包含 JAR文件)下查找knight.xml 文件; A2)如果你想從java 配置中加載應(yīng)用上下文,那么可以使用 AnnotationConfigApplicationContext: ApplicationContext context = new AnnotationConfigApplicationContext(com.spring.chapter1.KnightConfig.class); 4.1)console info: 五月 26, 2016 4:37:43 下午 org.springframework.context.support.AbstractApplicationContext prepareRefresh 信息: Refreshing org.springframework.context.support.FileSystemXmlApplicationContext@179d3b25: startup date [Thu May 26 16:37:42 CST 2016]; root of context hierarchy 五月 26, 2016 4:37:43 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 信息: Loading XML bean definitions from file [E:\bench-cluster\cloud-data-preprocess\SpringInAction4\META-INF\knight.xml] before: Fa la la, the knight is so brave! // higglight line. Embarking on quest to slay the dragon! // highlight line. after: Tee hee hee, the brave knight did embark on a quest! // highlight lien. 五月 26, 2016 4:37:43 下午 org.springframework.context.support.AbstractApplicationContext doClose 信息: Closing org.springframework.context.support.FileSystemXmlApplicationContext@179d3b25: startup date [Thu May 26 16:37:42 CST 2016]; root of context hierarchy 4.2)本文還是習慣上給出以上測試用例的調(diào)用過程

【2】容納你的bean 1)intro to Spring容器:在基于spring的應(yīng)用中,你的應(yīng)用對象生存于Spring容器中;(干貨——Spring容器的作用——Spring容器負責創(chuàng)建應(yīng)用程序中的bean并通過DI 來協(xié)調(diào)這些對象之間的關(guān)系) 2)spring容器并不是只有一個。Spring自帶了多個容器實現(xiàn),可以歸為兩種不同的類型: type1)bean工廠(org.springframework.beans.factory.eanFactory.context.ApplicationContext接口定義)是最簡單的 容器,提供基本的DI支持; type2)應(yīng)用上下文(由 org.springframework.context.ApplicationContext接口定義)基于BeanFactory構(gòu)建,并提供應(yīng)用框架級別的訪問; 3)推薦使用應(yīng)用上下文,因為bean工廠對大多數(shù)應(yīng)用來說太low了; 【2.1】使用應(yīng)用上下文 1)Spring自帶了多種類型的應(yīng)用上下文,下面羅列了幾個最可能遇到的; case1)AnnotationConfigApplicationContext:從一個或多個基于java 的配置類中加載Spring應(yīng)用上下文; case2)AnnotationConifgWebApplicationContext:從一個或多個基于java 的配置類中加載Spring Web應(yīng)用上下文; case3)ClassPathXmlApplicationContext:從類路徑下的一個或多個XML配置文件中加載上下文定義,把應(yīng)用上下文的定義文件作為類資源; case4)FileSystemXmlApplicationContext:從文件系統(tǒng)下的一個或多個XML配置文件中加載上下文定義; case5)XmlWebApplicationContext:從web 應(yīng)用下的一個或多個XML 配置文件中加載上下文定義; Attention)使用FileSystemXmlApplicationContext ?和 使用 ClassPathXmlApplicaitonContext的區(qū)別在于:(這里再次提供了它們的區(qū)別)FileSystemXmlApplicationContext 在指定的文件系統(tǒng)路徑下查找 knight.xml 文件,而 ClassPathXmlApplicationContext 是所有的類路徑(包含 JAR文件)下查找knight.xml 文件;
【3】Spring模塊 1)intro:在Spring4.0中, Spring框架的發(fā)布版本包括了20個不同的模塊,每個模塊會有3個JAR文件(二進制類庫,源碼jar,以及javadoc的jar);

總結(jié)

以上是生活随笔為你收集整理的spring(1)Spring之旅的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。