javascript
搭建SSM框架之Spring
? 作為一枚大四準(zhǔn)備畢業(yè)的學(xué)生,最重要的事便是畢業(yè)設(shè)計(jì),前些日子剛剛拿到畢設(shè)題目:“3D網(wǎng)絡(luò)圖:面向網(wǎng)絡(luò)結(jié)構(gòu)數(shù)據(jù)的可視化軟件設(shè)計(jì)”,(⊙o⊙)…,怎么說哪,看到題目就是一頭霧水(前幾屆不都是學(xué)生選課系統(tǒng),學(xué)生教務(wù)管理系統(tǒng)嗎-_-||,說好的套路那),望著題目,看看在公司里要學(xué)的PeopleSoft,我去,毫無關(guān)系好嗎。在學(xué)校學(xué)了兩年JAVA,校外實(shí)習(xí)交了一萬(wàn)多學(xué)習(xí)了JavaEE,找個(gè)工作去干了PeopleSoft-_-||,畢設(shè)又是可視化設(shè)計(jì),唉,真是世事多變,人生無常啊。
? 好了,吐槽歸吐槽,為了吃飯,為了畢業(yè)什么都得慢慢來。仔細(xì)了解了一下題目:“本題目要求學(xué)生使用webGL技術(shù)開發(fā)一個(gè)用于數(shù)據(jù)可視化呈現(xiàn)的web應(yīng)用軟件。網(wǎng)絡(luò)結(jié)構(gòu)數(shù)據(jù)的可視化表現(xiàn)方式一直是數(shù)據(jù)可視化領(lǐng)域研究的重點(diǎn)。采用webGL技術(shù),可以使用現(xiàn)代瀏覽器直接在網(wǎng)頁(yè)上呈現(xiàn)3D效果,為網(wǎng)絡(luò)結(jié)構(gòu)數(shù)據(jù)可視化和交互設(shè)計(jì)提供了新的可能。”突然想起在學(xué)校的日子里對(duì)那些網(wǎng)頁(yè)上呈現(xiàn)3D效果代碼的著迷(也就在那時(shí)學(xué)了JS,甚至決定了以后校外實(shí)習(xí)的選擇),回想起那時(shí)的時(shí)光,看看現(xiàn)在做的PeopleSoft,理想和現(xiàn)實(shí)的差距還真是大o(╥﹏╥)o,大概熟悉了一下題目后和老師聊了聊,原來這次畢設(shè)和我的理想是那么的接近,那就開始做,而且要好好做,人不止是為了現(xiàn)實(shí)而活著,至少要向自己的理想邁出幾步。
? 首先老師讓先搭起一套框架,說實(shí)話不管是實(shí)習(xí)還是在大學(xué),框架都沒有深入理解過(實(shí)習(xí)時(shí)剛學(xué)到JS,就找到工作,也沒想到會(huì)做PeopleSoft),那就從頭開始,慢慢來吧!
? 翻開好久不動(dòng)的JAVA資料,打開好久沒看的JAVA視頻,學(xué)著學(xué)著突然有種想哭的沖動(dòng)(不要問我為什么,就是很難過),以下便是我學(xué)習(xí)Spring的過程,以后會(huì)一直更新,直到把畢設(shè)做完。
? 首先我了解到Spring是一個(gè)社區(qū),也是一個(gè)很大的項(xiàng)目,其中包含了很多子項(xiàng)目,我主要用到的是其中的核心項(xiàng)目Spring Framework。
??Spring-framework 框架是一個(gè)分層架構(gòu),它包含一系列的功能要素,并被分為大約20個(gè)模塊。這些模塊分為Core Container、Data Access/Integration、Web、AOP(Aspect Oriented Programming)、Instrumentation和測(cè)試部分,其中我主要去學(xué)習(xí)的是Core Container和AOP。
??
?一、 其中Spring中有兩個(gè)重要的概念:
IOC:Inversion of Control 控制反轉(zhuǎn)
spring核心容器也可以稱為IOC容器,該容器主要負(fù)責(zé)管理各種對(duì)象的聲明周期(對(duì)象的創(chuàng)建、初始化、銷毀等)
IOC容器并沒有實(shí)現(xiàn)更多的功能,但它的存在使我們不需要很多代碼、不需要考慮對(duì)象間復(fù)雜的耦合關(guān)系就能從IOC容器中獲取合適的對(duì)象,而且提供了各種對(duì)象的可靠的管理,極大地降低了開發(fā)的復(fù)雜性。
總結(jié):
1.IOC意味著將你設(shè)計(jì)好的類交給了spring容器去控制,而不是在類的內(nèi)部自己進(jìn)行控制。
2.有IOC容器之后,剩下的工作只是在IOC容器中堆積木
3.之前項(xiàng)目中對(duì)象和對(duì)象之間的關(guān)系是直接寫死在代碼中的,而使用了IOC容器后則是在代碼中并沒有寫對(duì)象和對(duì)象是什么關(guān)系,而是把這種關(guān)系的建立交給了IOC容器去做,并且是在代碼運(yùn)行的時(shí)候動(dòng)態(tài)建立起來(我們可以通過配置文件進(jìn)行任意改變)
4.IOC其實(shí)就是一種將調(diào)用者與被調(diào)用者分離的思想。
DI:Dependency Injection 依賴注入
DI的概念的提出是用來代替IOC的,表示讓調(diào)用類對(duì)某一接口實(shí)現(xiàn)類的依賴關(guān)系由容器注入,以移除調(diào)用類對(duì)某一接口實(shí)現(xiàn)類的依賴。(思考servlet和service層接口以及service層接口實(shí)現(xiàn)類這三者的關(guān)系)
依賴注入 這個(gè)名詞顯然比 控制反轉(zhuǎn) 更直接明了,并且易于理解。
?
二、對(duì)此有了了解后,下載Spring:
http://repo.springsource.org/libs-release-local/org/springframework/spring/3.2.4.RELEASE/spring-framework-3.2.4.RELEASE-dist.zip
直接粘到地址欄或者下載工具里,每次有更新只要改版本號(hào)就可以。
?
三、然后就是Spring的配置流程及需要理解的內(nèi)容:
Spring IOC容器核心api(容器將來會(huì)是一個(gè)對(duì)象)
BeanFactory接口
BeanFactory是Spring中IOC容器的核心接口,主要用于處理Bean的初始化和配置,建立對(duì)象間的依賴關(guān)系
接口中主要方法如下:
//根據(jù)指定名稱返回一個(gè)Bean實(shí)例
Object getBean(String name)
//判斷名稱為name的Bean是否是原型,即是否總是返回一個(gè)新實(shí)例(非單例)
boolean isPrototype(String name)
//判斷名稱為name的Bean是否是單例
boolean isSingleton(String name)
//判斷容器中是否包含給定名稱的Bean實(shí)例
boolean containsBean(String name)
//如果名稱為name的Bean有別名則返回所以別名
String[] getAliases(String name)
ApplicationContext接口
該接口繼承于BeanFactory,增強(qiáng)了BeanFactory,增加了事務(wù)處理AOP,國(guó)際化,事件傳遞等功能
所以在代碼中我們一般會(huì)使用ApplicationContext接口,以及這個(gè)接口相應(yīng)的實(shí)現(xiàn)類來創(chuàng)建spring的容器對(duì)象
例如:
String path = "com/briup/ioc/set/set.xml";
ApplicationContext container =
new ClassPathXmlApplicationContext(path);
Student s = (Student)container.getBean("student");
?
?四、配置文件
Spring通過讀取配置文件中的數(shù)據(jù)來對(duì)項(xiàng)目各個(gè)對(duì)象進(jìn)行實(shí)例化,配置以及組裝,通常使用XML文件來作為配置文件
XML基本結(jié)構(gòu)如下:
<?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>
注意事項(xiàng):
1.這個(gè)文件的頭部聲明可以在下載的spring文檔中的示例找到
2.這里面用到了倆個(gè)schema文件(.xsd文件),分別是spring-beans-3.2.xsd和spring-context-3.2.xsd,它們也可以在下載的spring文檔中找到
3.在Eclipse中把xml文件和schema文件關(guān)聯(lián)后,xml中就可以有標(biāo)簽代碼的提示了(注意關(guān)聯(lián)時(shí)別配置錯(cuò)了)
4.spring框架是模塊化的,之后使用其他模塊的時(shí)候,還可以在該xml的根元素中繼續(xù)引用其他模塊中相應(yīng)的schema文件,然后就可以使用引入新模塊中的標(biāo)簽代碼了
?
測(cè)試?yán)?#xff1a;
set方式注入(必須依靠set方法):
導(dǎo)入jar包:
創(chuàng)建兩個(gè)測(cè)試類,例如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>寫測(cè)試方法:
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();}}這就是一個(gè)Spring實(shí)現(xiàn)控制反轉(zhuǎn),依賴注入的例子。
? 總結(jié)(Spring):
1.降低耦合性(在一個(gè)類中運(yùn)行時(shí)引入其他類,而不是直接new對(duì)象)
2.去除一些方法中重復(fù)代碼(例如日志文件,權(quán)限控制,事務(wù)處理(開事務(wù),提交事務(wù),異常事務(wù)處理) //需要這個(gè)代碼,但這個(gè)代碼又不能直接寫到這里)
spring可以在運(yùn)行期間把代碼進(jìn)行動(dòng)態(tài)結(jié)合
3.管理對(duì)象的生命周期
4.spring核心容器中放入對(duì)象,這些對(duì)象被稱為bean(可重復(fù)使用的組件)
5.IOC:反轉(zhuǎn),主動(dòng)變被動(dòng)
DI:依賴(依賴的解釋:例如web層依賴service層,service層依賴dao層)注入,DI的概念的提出是用來代替IOC的
轉(zhuǎn)載于:https://www.cnblogs.com/wsyblog/p/8157488.html
總結(jié)
以上是生活随笔為你收集整理的搭建SSM框架之Spring的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PS批量修改照片大小
- 下一篇: 180118 有趣的人工智能对话小程序