javascript
Spring第一天
前置知識(shí)
? ? 1.三層架構(gòu)及其MVC的關(guān)系
三層架構(gòu)是一個(gè)分層式的軟件體系架構(gòu)設(shè)計(jì),是一個(gè)概念。分為表現(xiàn)層UI,業(yè)務(wù)邏輯層BLL,數(shù)據(jù)訪問層DAL。三層架構(gòu)的重點(diǎn)是實(shí)現(xiàn)“高內(nèi)聚,低耦合”,即解耦。
MVC的作用是實(shí)現(xiàn)三層架構(gòu)中的UI層,例如:
M層(model)是應(yīng)用程序的主體部分,提供數(shù)據(jù)和數(shù)據(jù)之間的關(guān)系(類與類之間)、轉(zhuǎn)化等等。
V層(view)是應(yīng)用程序中用戶界面相關(guān)部分,具體實(shí)現(xiàn)數(shù)據(jù)的展示和輸入功能。例如 JSP HTML
C層(controller)是根據(jù)用戶的輸入,控制用戶界面的數(shù)據(jù)顯示和更新model對(duì)象狀態(tài)。起到控制整個(gè)業(yè)務(wù)流程、實(shí)現(xiàn)mv兩層之間協(xié)同作戰(zhàn)的目的。Servlet? service(JAVA WEB)
MVC是一種設(shè)計(jì)模式,目的是讓HTML代碼和業(yè)務(wù)邏輯代碼分開,讓代碼看起來更加清晰,便于開發(fā)。
小項(xiàng)目經(jīng)常會(huì)將三層架構(gòu)和MVC模式混為一談,認(rèn)為M對(duì)應(yīng)數(shù)據(jù)訪問層DAL(Dao和實(shí)體類),V對(duì)應(yīng)表現(xiàn)層UI,C對(duì)應(yīng)業(yè)務(wù)邏輯層BLL。這是因?yàn)樵诤芏鄷r(shí)候一些小項(xiàng)目分層架構(gòu)不明細(xì)、缺少對(duì)應(yīng)的概念分包所導(dǎo)致的。
這個(gè)概念是軟件工程中的一個(gè)概念,是判斷設(shè)計(jì)好壞的標(biāo)準(zhǔn)。簡而言之,就是看類的內(nèi)聚性是否高,耦合度是否低
高內(nèi)聚:一個(gè)軟件模塊必須由關(guān)聯(lián)性很強(qiáng)的代碼組成,也就是一個(gè)模塊只做一件事。
低耦合:不同的模塊之間互相關(guān)聯(lián)的程度是否足夠低,面向?qū)ο笞兂擅嫦蚪涌诰幊?實(shí)例,改造dao并采取面向接口編程)。
? ? 設(shè)計(jì)模式之工廠模式(簡單工廠、抽象工廠、單例)
(單例)
1.?單例類只能有一個(gè)實(shí)例
2.?單例類必須創(chuàng)建自己唯一的實(shí)例。
3.?單例類必須為其他對(duì)象提供這一實(shí)例。
那么如何實(shí)現(xiàn)滿足上述條件的單例類呢?答案是:
1.?私有構(gòu)造方法。
2.?內(nèi)部創(chuàng)建靜態(tài)對(duì)象。
3.?提供靜態(tài)方法返回該靜態(tài)對(duì)象。
懶漢模式/餓漢模式
//餓漢式 class T{private T(){}private static T t = new T();public static T a(){return t;} } //懶漢式 class T1{private T1(){}private static T1 t1;public static T1 a(){if(t1==null){t1 = new T1();}return t1; }Spring初體驗(yàn)之IOC
?
? ? ? ? ?a)? ?一個(gè)輕量級(jí)的企業(yè)開發(fā)軟件,時(shí)至今日已經(jīng)在很多企業(yè)被應(yīng)用。
? ? ? ? ?b)? ?非侵入式框架,優(yōu)點(diǎn)在于松耦合、可配置、易測試。
? ? ? ? ?2.String體系架構(gòu)
? ? ? ??
? ? ? ? ?
3.Spring主要模塊
a)?????? Spring核心模塊(Spring Core):Spring的核心容器模塊,它提供IOC的支持。該模塊中包含BeanFactory,它采用工廠模式來實(shí)現(xiàn)IOC,負(fù)責(zé)對(duì)bean的生命周期的管理。
b)?????? Application Context(上下文模塊):該模塊擴(kuò)展了BeanFactory的功能,例如提供了i18n,系統(tǒng)生命周期以及驗(yàn)證的支持
c)??????? Spring的AOP模塊:該模塊為應(yīng)用系統(tǒng)的AOP開發(fā)提供了支持。
d)?????? JDBC和DAO模塊:提供了JDBC封裝的模板代碼,使得使用JDBC開發(fā)更加簡潔。
e)?????? ORM映射模塊:該模塊提供了對(duì)許多流行的ORM框架的支持,其中包括Hibernate,JDO和iBATIS SQL的支持
f)???????? Spring Web模塊:該模塊中Spring提供了對(duì)其它的WEB框架的支持,包知Struts,JSF,WEBWORK等
g)?????? Spring MVC框架:Spring提供的用于開發(fā)WEB應(yīng)用的MVC框架
?4.Spring核心應(yīng)用之IOC:
a)?????? IOC(控制反轉(zhuǎn)):程序中各個(gè)組件之間的關(guān)系,不由程序代碼直接操控,而由容器控制。控制權(quán)由應(yīng)用代碼中轉(zhuǎn)到了外部容器,即所謂的反轉(zhuǎn)。
b)?????? DI(依賴注入):各個(gè)組件之間的依賴關(guān)系不是在程序中寫死,而是寫在外部的配置文件中,然后運(yùn)行時(shí)通過容器動(dòng)態(tài)注入。
5。SringIOC開發(fā):
a)?????? 導(dǎo)入jar包:
| <dependency> |
?
b)?????? 聲明一個(gè)bean
c)??????? 創(chuàng)建配置文件,并從配置文件中配置對(duì)象
d)?????? 創(chuàng)建測試類,通過XmlBeanFactory初始化bean工廠,通過bean工廠從xml中讀取對(duì)象。
6.異同:
a)?????? BeanFactory和ApplicationContext:ApplicationCotext是spring更加高級(jí)的IOC容器除BeanFactory的功能外,還有如下特性:
提供文本信息解析工具,包括對(duì)國際化支持。
提供載入文件資源的通用方法,如圖片。
可以向注冊為監(jiān)聽器的bean發(fā)送事件。
BeanFactory延遲加載所有bean,直到getBean()方法被調(diào)用。ApplicationCotext會(huì)在啟動(dòng)后預(yù)載入所有單例bean
b)?????? Id和name:使用基本一致,name允許有一些特殊字符
c)??????? 通過property初始化對(duì)象屬性和constructor-arg初始化對(duì)象屬性
d)?????? Bean和Property:
7.集合裝配:如果對(duì)應(yīng)bean的屬性是一個(gè)集合則需要使用集合裝配,Spring支持多種集合裝配類型:
a)?????? <list>對(duì)應(yīng)類型為java.util.List、java.util.Vector 、java.util.Collection 、數(shù)組的屬性
b)?????? <set>對(duì)應(yīng)類型為java.util.Set的屬性
c)??????? <map>對(duì)應(yīng)類型為java.util.Map的屬性
d)?????? <props>對(duì)應(yīng)類型為java.util.Properties的屬性
a)?????? List裝配:
<property name=“l(fā)ist">
<list>
<value>a</value>
<value>b</value>
</list>
</property>
b)?????? Set裝配:
<property name=“set">
<set>
<value>a</value>
<value>b</value>
</set>
</property>
c)??????? Map裝配:
<property name=“map">
<map>
<entry key="1" value=“a"></entry>
<entry key="2" value=“b"></entry>
</map>
</property>
?
8.自動(dòng)裝配:為了方便配置,spring提供了自動(dòng)裝配,有四種類型,分別如下:
a)?????? byName:尋找和屬性名相同的bean,若找不到,則裝不上。
b)?????? byType:尋找和屬性類型相同的bean,若找不到,則裝不上,找到多個(gè),拋異常。
c)??????? constructor:查找和bean的構(gòu)造參數(shù)一致的一個(gè)或多個(gè)bean,若找不到或找到多個(gè)拋則異常。按照參數(shù)的類型裝配,與(2)相似.
d)?????? autodetect:首先嘗試用(3)來裝配,然后使用(2)方式。不確定性的處理與(3)和(2)一致。
注意:使用最多的是通過byName進(jìn)行諸如
a)?????? singleton 單實(shí)例,即在整個(gè)應(yīng)用程序中有一個(gè)Bean的實(shí)例。
b)?????? prototype原型,每次請(qǐng)求獲取bean時(shí),容器都會(huì)構(gòu)建新的bean實(shí)例。
以下幾個(gè)為Spring2.0新加的作用域:
c)??????? session對(duì)應(yīng)web應(yīng)用時(shí), 對(duì)應(yīng)Web應(yīng)用的每個(gè)會(huì)話會(huì)建立一個(gè)bean的實(shí)例。
d)?????? request對(duì)應(yīng)web應(yīng)用時(shí),對(duì)應(yīng)Web的每個(gè)請(qǐng)求會(huì)建立一個(gè)bean實(shí)例。
a)?????? 修改spring_ico.xml,寫入<context:component-scan base-package="需要掃描的包名"/>。
b)?????? 將需要受Spring管理的組件加入@Component[(“cpmponentName”)]
c)??????? 如果某些組件需要被注入其他組件的話,需要在set方法加入: @Resource[(name=“cpmponentName”)]
9.Annotation的優(yōu)缺點(diǎn):
a)?????? 優(yōu)點(diǎn):靈活、簡單、開發(fā)效率高
b)?????? 缺點(diǎn):如果沒有源碼,就無法運(yùn)用annotation,只能使用xml
?
?
?
? ? ?
轉(zhuǎn)載于:https://www.cnblogs.com/silentwlan/p/10433241.html
總結(jié)
- 上一篇: C语言中二维数组名与数组地址、首行地址、
- 下一篇: Spring----JmsTemplat