搭建SSM框架之Spring

? 作為一枚大四準備畢業的學生,最重要的事便是畢業設計,前些日子剛剛拿到畢設題目:“3D網絡圖:面向網絡結構數據的可視化軟件設計”,(⊙o⊙)…,怎么說哪,看到題目就是一頭霧水(前幾屆不都是學生選課系統,學生教務管理系統嗎-_-||,說好的套路那),望著題目,看看在公司里要學的PeopleSoft,我去,毫無關系好嗎。在學校學了兩年JAVA,校外實習交了一萬多學習了JavaEE,找個工作去干了PeopleSoft-_-||,畢設又是可視化設計,唉,真是世事多變,人生無常啊。

? 好了,吐槽歸吐槽,為了吃飯,為了畢業什么都得慢慢來。仔細了解了一下題目:“本題目要求學生使用webGL技術開發一個用于數據可視化呈現的web應用軟件。網絡結構數據的可視化表現方式一直是數據可視化領域研究的重點。采用webGL技術,可以使用現代瀏覽器直接在網頁上呈現3D效果,為網絡結構數據可視化和交互設計提供了新的可能。”突然想起在學校的日子里對那些網頁上呈現3D效果代碼的著迷(也就在那時學了JS,甚至決定了以后校外實習的選擇),回想起那時的時光,看看現在做的PeopleSoft,理想和現實的差距還真是大o(╥﹏╥)o,大概熟悉了一下題目后和老師聊了聊,原來這次畢設和我的理想是那么的接近,那就開始做,而且要好好做,人不止是為了現實而活著,至少要向自己的理想邁出幾步。

? 首先老師讓先搭起一套框架,說實話不管是實習還是在大學,框架都沒有深入理解過(實習時剛學到JS,就找到工作,也沒想到會做PeopleSoft),那就從頭開始,慢慢來吧!

? 翻開好久不動的JAVA資料,打開好久沒看的JAVA視頻,學著學著突然有種想哭的沖動(不要問我為什么,就是很難過),以下便是我學習Spring的過程,以后會一直更新,直到把畢設做完。

? 首先我了解到Spring是一個社區,也是一個很大的項目,其中包含了很多子項目,我主要用到的是其中的核心項目Spring Framework。

??Spring-framework 框架是一個分層架構,它包含一系列的功能要素,并被分為大約20個模塊。這些模塊分為Core Container、Data Access/Integration、Web、AOP(Aspect Oriented Programming)、Instrumentation和測試部分,其中我主要去學習的是Core Container和AOP。

??

?一、 其中Spring中有兩個重要的概念:

IOC:Inversion of Control 控制反轉
spring核心容器也可以稱為IOC容器,該容器主要負責管理各種對象的聲明周期(對象的創建、初始化、銷毀等)
IOC容器并沒有實現更多的功能,但它的存在使我們不需要很多代碼、不需要考慮對象間復雜的耦合關系就能從IOC容器中獲取合適的對象,而且提供了各種對象的可靠的管理,極大地降低了開發的復雜性。

總結:
1.IOC意味著將你設計好的類交給了spring容器去控制,而不是在類的內部自己進行控制。
2.有IOC容器之后,剩下的工作只是在IOC容器中堆積木
3.之前項目中對象和對象之間的關系是直接寫死在代碼中的,而使用了IOC容器后則是在代碼中并沒有寫對象和對象是什么關系,而是把這種關系的建立交給了IOC容器去做,并且是在代碼運行的時候動態建立起來(我們可以通過配置文件進行任意改變)
4.IOC其實就是一種將調用者與被調用者分離的思想。

DI:Dependency Injection 依賴注入
DI的概念的提出是用來代替IOC的,表示讓調用類對某一接口實現類的依賴關系由容器注入,以移除調用類對某一接口實現類的依賴。(思考servlet和service層接口以及service層接口實現類這三者的關系)
依賴注入 這個名詞顯然比 控制反轉 更直接明了,并且易于理解。

?

二、對此有了了解后,下載Spring:

http://repo.springsource.org/libs-release-local/org/springframework/spring/3.2.4.RELEASE/spring-framework-3.2.4.RELEASE-dist.zip
直接粘到地址欄或者下載工具里,每次有更新只要改版本號就可以。

?

三、然后就是Spring的配置流程及需要理解的內容:

Spring IOC容器核心api(容器將來會是一個對象)
BeanFactory接口
BeanFactory是Spring中IOC容器的核心接口,主要用于處理Bean的初始化和配置,建立對象間的依賴關系

接口中主要方法如下:
//根據指定名稱返回一個Bean實例
Object getBean(String name)

//判斷名稱為name的Bean是否是原型,即是否總是返回一個新實例(非單例)
boolean isPrototype(String name)

//判斷名稱為name的Bean是否是單例
boolean isSingleton(String name)

//判斷容器中是否包含給定名稱的Bean實例
boolean containsBean(String name)

//如果名稱為name的Bean有別名則返回所以別名
String[] getAliases(String name)

ApplicationContext接口
該接口繼承于BeanFactory,增強了BeanFactory,增加了事務處理AOP,國際化,事件傳遞等功能

所以在代碼中我們一般會使用ApplicationContext接口,以及這個接口相應的實現類來創建spring的容器對象
例如:
String path = "com/briup/ioc/set/set.xml";
ApplicationContext container =
new ClassPathXmlApplicationContext(path);

Student s = (Student)container.getBean("student");

?

?四、配置文件
Spring通過讀取配置文件中的數據來對項目各個對象進行實例化,配置以及組裝,通常使用XML文件來作為配置文件

XML基本結構如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd">

</beans>

注意事項:
1.這個文件的頭部聲明可以在下載的spring文檔中的示例找到
2.這里面用到了倆個schema文件(.xsd文件),分別是spring-beans-3.2.xsd和spring-context-3.2.xsd,它們也可以在下載的spring文檔中找到
3.在Eclipse中把xml文件和schema文件關聯后,xml中就可以有標簽代碼的提示了(注意關聯時別配置錯了)
4.spring框架是模塊化的,之后使用其他模塊的時候,還可以在該xml的根元素中繼續引用其他模塊中相應的schema文件,然后就可以使用引入新模塊中的標簽代碼了

?

測試例子:

set方式注入(必須依靠set方法):

導入jar包:

創建兩個測試類,例如Student和Teacher,其中Teacher類中包含Student。

編寫XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.2.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.2.xsd"><bean name="stu" class="com.briup.bean.Student"><property name="id" value="1"></property><property name="name" value="tom"></property><property name="age" value="20"></property></bean><bean name="teacher" class="com.briup.bean.Teacher"><property name="id" value="1"></property><property name="name" value="zhangsan"></property><property name="student" ref="stu"></property></bean>

  寫測試方法:

public void ioc_set() {try {String[] path = {"com/briup/ioc/set/set.xml"};ApplicationContext container = new ClassPathXmlApplicationContext(path);Teacher t = (Teacher)container.getBean("teacher");System.out.println(t);System.out.println(t.getId());System.out.println(t.getName());System.out.println(t.getStudent());System.out.println("-------------");System.out.println(t.getStudent().getId());System.out.println(t.getStudent().getName());System.out.println(t.getStudent().getAge());} catch (Exception e) {e.printStackTrace();}}

  這就是一個Spring實現控制反轉,依賴注入的例子。

? 總結(Spring):

1.降低耦合性(在一個類中運行時引入其他類,而不是直接new對象)
2.去除一些方法中重復代碼(例如日志文件,權限控制,事務處理(開事務,提交事務,異常事務處理) //需要這個代碼,但這個代碼又不能直接寫到這里)
spring可以在運行期間把代碼進行動態結合
3.管理對象的生命周期
4.spring核心容器中放入對象,這些對象被稱為bean(可重復使用的組件)
5.IOC:反轉,主動變被動
DI:依賴(依賴的解釋:例如web層依賴service層,service層依賴dao層)注入,DI的概念的提出是用來代替IOC的

轉載于:https://www.cnblogs.com/wsyblog/p/8157488.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/453774.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453774.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453774.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

audio unity 加速_淺談Unity中Android、iOS音頻延遲

在Unity上面做音游&#xff0c;當在移動端實機運行起來&#xff0c;會發現&#xff0c;音頻的發出會有一定的延遲&#xff0c;無論是長音效還是短音效&#xff0c;Unity內置的Audio內部使用的是FMOD&#xff0c;有以下手段改善通過設置稍微改善其延遲的問題Edit → Project Set…

深度學習之 hard negative mining (難例挖掘)

Hard Negative Mining Method 思想 hard是困難樣本&#xff0c;negative是負樣本&#xff0c;hard negative就是說在對負樣本分類時候&#xff0c;loss比較大&#xff08;label與prediction相差較大&#xff09;的那些樣本&#xff0c;也可以說是容易將負樣本看成正樣本的那些…

單列表_使用Excel中的quot;記錄單quot;功能快速錄入數據

在Excel中進行數據錄入的時候&#xff0c;平常都是一行一行地錄入數據&#xff0c;但是有時候在單元格之間&#xff0c;行與行&#xff0c;列與列之間頻繁地切換去錄入數據&#xff0c;費事費力還容易出錯。今天給你推薦一個既好用又有效率的Excel中的隱藏功能——“記錄單”。…

CentOS 6.9下的Setup工具(用于管理服務/防火墻/網絡配置/驗證服務)

說明&#xff1a;Setup工具套件好像是CentOS下特有的用于管理服務/防火墻/網絡配置等&#xff0c;其實就是基于命令行模式界面的GUI工具。唯一特點就是方便。 安裝&#xff1a; #安裝Setup命令工具 yum -y install setuptool #安裝Setup工具配套的系統服務組件 yum -y insta…

wireshark解析rtp協議,流媒體中的AMR/H263/H264包的方法

原文教程&#xff1a;http://hi.baidu.com/zjxiaoyu3/blog/item/22f9f18f32b45de5f11f3670.html 抓到完整的流媒體包之后&#xff0c;用wireshark打開&#xff0c;其中的包可能不會自動映射成RTP&#xff0b;AMR&#xff0f;H263&#xff0f;H264的包&#xff0c;做如下修改操作…

深度學習之非極大值抑制(Non-maximum suppression,NMS)

非極大值抑制&#xff08;Non-maximum suppression&#xff0c;NMS&#xff09;是一種去除非極大值的算法&#xff0c;常用于計算機視覺中的邊緣檢測、物體識別等。 算法流程 給出一張圖片和上面許多物體檢測的候選框&#xff08;即每個框可能都代表某種物體&#xff09;&…

148. 顏色分類

給定一個包含紅&#xff0c;白&#xff0c;藍且長度為 n 的數組&#xff0c;將數組元素進行分類使相同顏色的元素相鄰&#xff0c;并按照紅、白、藍的順序進行排序。 我們可以使用整數 0&#xff0c;1 和 2 分別代表紅&#xff0c;白&#xff0c;藍。 注意事項 不能使用代碼庫中…

vue項目token放在哪里_關于vue動態菜單的那點事

vue-element-admin4.0國內節點訪問地址&#xff1a;https://panjiachen.gitee.io/vue-element-admin-site/zh/本此使用的是https://github.com/PanJiaChen/vue-element-admin/tree/i18n 國際化分支的版本。說是除了國際化其他都一樣。本文主要介紹前臺動態的使用資源權限。后臺…

H264學習方法歷程資料

我的H.264學習歷程 半年前&#xff0c;我知道了H.264這個名詞。那個時候決定學習H.264&#xff0c;可是我連資料都不知道如何收集。而且整個學校就只有我一個人在學習H.264&#xff0c; 找不到人交流&#xff0c;所以那個時候學得真的是舉步維艱&#xff0c;很痛苦&#xff0c…

深度學習之 ROI Pooling

什么是ROI&#xff1f; ROI是 Region of interest 的簡寫&#xff0c;指的是 Faster R-CNN 結構中&#xff0c;經過 RPN 層后&#xff0c;產生的 proposal 對應的 box 框。 ROI Pooling 顧名思義&#xff0c;是 pooling 層的一種&#xff0c;而且是針對 ROIs 的 pooling。整個…

KD樹小結

很久之前我就想過怎么快速在二維平面上查找一個區域的信息&#xff0c;思考許久無果&#xff0c;只能想到幾種優秀一點的暴力。 KD樹就是干上面那件事的。 別的不多說&#xff0c;趕緊把自己的理解寫下來&#xff0c;免得涼了。 KD樹的組成 以維護k維空間(x,y,……)內的KD樹為例…

多元函數求極值中的a_多元函數的條件極值和拉格朗日乘數法

、條件極值、拉格朗日乘數法1. 轉化為無條件極值在討論多元函數極值問題時&#xff0c;如果遇到除了在定義域中尋求駐點(可能的極值點)外&#xff0c;對自變量再無別的限制條件&#xff0c;我們稱這類問題為函數的無條件極值。如求的極值&#xff0c;就是無條件極值問題。然而在…

深度學習之 RPN(RegionProposal Network)- 區域候選網絡

anchor boxes基本概念與作用: feature map 上的一個點可以映射回輸入圖片上的一個點&#xff0c;以特征圖上這個點為中心&#xff0c;預先人為設定 k 個 boxes&#xff0c;這些 boxes 就稱為在這個點上生成的 k 個 anchor boxes&#xff08;所有anchor boxes的中心點坐標是一樣…

h264的碼率控制 JVT-G012

開始看h264的碼率控制&#xff0c;很多地方都提到 G012&#xff0c;拿來做為參考比較&#xff0c;看來很有必要研究清楚。 偶這人&#xff0c;E文文檔不翻譯的話&#xff0c;看過就忘了&#xff0c;于是草草翻譯了下&#xff0c;因為不打算做B幀&#xff0c;也不準備在同一幀中…

Android RecyclerView嵌套EditView實時更新Item數據

一、場景&#xff08;例如&#xff1a;購物車&#xff09; 1、當我們需要以列表樣式管理某些數據時&#xff0c;可能需要列表項的某個字段可編輯 2、編輯Item上的某個字段后可能還要更新相關字段的值 二、可能遇到的問題 1、列表滑動導致輸入框中的數據錯位&#xff08;或者焦點…

workbench拓撲優化教程_優化技術在水泵水力設計的應用(上篇)

文章來源&#xff1a;安世亞太官方訂閱號&#xff08;搜索&#xff1a;Peraglobal&#xff09;CFD技術在泵的內流數值模擬、研究泵內部流動規律和結構方面已廣泛應用&#xff0c;取得了很多成果。但是初步設計的產品如果通過CFD仿真得到的性能曲線不能滿足使用要求&#xff0c;…

深度學習之 TensorRT

1 簡介 TensorRT是一個高性能的深度學習推理&#xff08;Inference&#xff09;優化器&#xff0c;可以為深度學習應用提供低延遲、高吞吐率的部署推理。TensorRT可用于對超大規模數據中心、嵌入式平臺或自動駕駛平臺進行推理加速。TensorRT現已能支持TensorFlow、Caffe、Mxne…

H.264筆記

H.264標準寫得比較繁復&#xff0c;所以考慮在瀏覽完Whitepaper之后就開始研讀X264代碼。X264代碼風格還是比較清晰簡潔的。根據對標準得理解&#xff0c;Picture Order Count在Slice解碼的一開始就被提及&#xff1a;I0 B1 B2 P3 B4 B5 P6I0 P3 B1 B2 P6 B4 B5于是I0的POC是0&…

進制轉換中dbho是什么意思_什么是網段?二進制十進制如何互相轉換?看完這篇,你就全明白了...

之前的文章講了ip&#xff0c;子網掩碼&#xff0c;網關的關系&#xff0c;今天著重講一下網段。我們用傻瓜交換機通訊時&#xff0c;一個網段的設備才能互相通訊&#xff0c;怎么能判斷兩個ip是同一個網段呢&#xff1f;今天就簡單的說一下。(這篇文章用語音聽可以起到催眠作用…

【網絡流24題】星際轉移問題(最大流)

【網絡流24題】星際轉移問題&#xff08;最大流&#xff09; 題面 Cogs 題解 因為天數是未知的&#xff0c;所以我們要想辦法處理天數 可以選擇二分或者依次累加天數 因為數據范圍較小&#xff0c;使用二分可能反而復雜度會增高 所以使用不斷累加天數 那么&#xff0c;把所有的…