1. 程式人生 > >搭建SSM框架之Spring

搭建SSM框架之Spring

管理 com 銷毀 系列 try 要去 nco cati 慢慢

作為一枚大四準備畢業的學生,最重要的事便是畢業設計,前些日子剛剛拿到畢設題目:“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/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">
    
    <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的

搭建SSM框架之Spring