2023年Spring知識(shí)點(diǎn)總結(jié)_第1頁
2023年Spring知識(shí)點(diǎn)總結(jié)_第2頁
2023年Spring知識(shí)點(diǎn)總結(jié)_第3頁
2023年Spring知識(shí)點(diǎn)總結(jié)_第4頁
2023年Spring知識(shí)點(diǎn)總結(jié)_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

關(guān)于spring的幾個(gè)集合對(duì)象介紹

ListFactoryBean

org.springframework.beans.factory.config.ListFactoryBean

ListFactoryBean類為開發(fā)者提供了一種在Spring的bean配置文獻(xiàn)中創(chuàng)建一個(gè)具體的

列表集合類(ArrayList和LinkedList)。

這里有一個(gè)ListFactoryBean示例,在運(yùn)營(yíng)時(shí)它將實(shí)例化一個(gè)ArrayList,并注入到

一個(gè)bean屬性。

1.<beanid=HemaiIs"class="org.springframework.beans.factory.confi

g.ListFactoryBeann>

2.<propertyname="sourceList">

3.<list>

4.<valuex/value>

5.<valuex/value>

6.<va1uex/value>

7.<valuex/value>

8.</list>

9.</property>

10.</bean>

配置

<beanid="CustomerBean"c1ass=Mcom.yiibai.common.CustomerM>

0Vpropertyname=ulistsH>

<beanclass="org.springframework.beans.factor

y.config.ListFactoryBeann>

<propertyname=ntargetListClassM>

000<value>java.utiLArrayList</va1ue>

</property>

。。<propertyname="sourceListn>

o"Vlist>

。。<va1ue>one</value>

<va1ue>2</value>

。。。<value>three</value>

o。</property>

o</bean>

。。V/property>

</bean>

代碼

publicclassApp{

epublicstaticvoidmain(String[]args){

。App1icationContextcontext=newClassPathXmlApplicationConte

xt(

?!癮pplicationcontext,xml");

。Customercust=(Customer)context.getBean(HCustomerBe

an)

System.out.print1n(cust);

0

°}

結(jié)果

Customer[1ists=[one,2,three]]Type=[classjava.util.ArrayList]

MapFactoryBean

org.springframework.beans.factory.config.MapFactoryBean

1.<beanid="emaiIs"class="org.springframework,beans.factory.co

nfig.MapFactoryBean">

2.<propertyname=nsourceMapn>

3.<map>

4.<entrykey="pechorinHva1ue=""/>

5.<entrykey='*raskolnikov"value='"7>

6.<entrykey="stavroginHvalue=Hn/>

7.<entrykey="porfiry"value=""/>

8.</map>

9.</property>

10.</bean>

SetFactoryBean

org.springframework.beans.factory.config.SetFactoryBean

1.<beanid="emails"class="org.springframework,beans.factory.conf

ig.SetFactoryBean">

2.<propertyname=nsourceSetn>

3.<set>

4.<va1uex/va1ue>

5.<va1ueX/value>

6.<va1uex/value>

7.<valuex/value>

8.</set>

9.</property>

10.</bean>

PropertiesFactoryBean

org.springframework.beans.factory.config.PropertiesFactoryBean

通過PropertiesFactoryBean來獲取properties配制文獻(xiàn)數(shù)據(jù)

1.<beanid="jdbcConfiguration"class="org.springframework.b

eans.factory.config.PropertiesFactoryBean">

2.<propertyname="location"va1ue="classpath:com/foo/jdbc-product

ion.properties"/>

3.</bean>

PropertyPathFactoryBean

org.springframework,beans,factory.config.PropertyPathFactoryBean

通過PropertyPathFactoryBean來指定屬性途徑獲取屬性值

1.<beanid="testBean'*class="org.springframework.beans.TestBean

"singleton="false">

2.<propertyname="age"value="l0"/>

3.<propertyname="spouse">

4.<beanclass="org.springframework.beans.TestBean">

5.<propertyname="age"value="11"/>

6.</bean>

7.</property>

8.</bean>

9.<beanid=ntestBean.age"class="org.springframework.beans.fac

tory.config.PropertyPathFactoryBean"/>

框架介紹

Spring是一個(gè)開源框架,Spring是于2023年興起的一個(gè)輕量級(jí)的Java開發(fā)框

架,由RodJohnson在其著作ExpertOne-0n—OneJ2EEDevelopment

andDesign中闡述的部分理念和原型衍生而來。它是為了解決公司應(yīng)用開發(fā)的復(fù)雜性而

創(chuàng)建的??蚣艿闹匾獌?yōu)勢(shì)之一就是其分層架構(gòu),分層架構(gòu)允許使用者選擇使用哪一個(gè)組件,

同時(shí)為J2EE應(yīng)用程序開發(fā)提供集成的框架。Spring使用基本的JavaBean來完畢

以前只也許由EJB完畢的事情。然而,Spring的用途不僅限于服務(wù)器端的開發(fā)。從簡(jiǎn)樸

性、可測(cè)試性和松耦合的角度而言,任何Java應(yīng)用都可以從Spring中受益。Spring的核

心是控制反轉(zhuǎn)(IoC)和面向切面(AOP)簡(jiǎn)樸來說,Spring是一個(gè)分層的JavaSE/EEfull

一stack(一站式)輕量級(jí)開源框架。

框架特性

輕量

—從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個(gè)大小只

有1MB多的JAR文獻(xiàn)里發(fā)布。并且Spring所需的解決開銷也是微局限性道的。此外,Spr

ing是非侵入式的:典型地,Spring應(yīng)用中的對(duì)象不依賴于Spring的特定類。

AOP(面向切面)

面向切面——Spring提供了面向切面編程的豐富支持,允許通過度離應(yīng)用的業(yè)務(wù)邏輯

與系統(tǒng)級(jí)服務(wù)(例如審計(jì)(auditing)和事務(wù)(transaction)管理)進(jìn)行內(nèi)聚性的開

發(fā)。應(yīng)用對(duì)象只實(shí)現(xiàn)它們應(yīng)當(dāng)做的——完畢業(yè)務(wù)邏輯——僅此而已。它們并不負(fù)責(zé)(甚至

是意識(shí))其它的系統(tǒng)級(jí)關(guān)注點(diǎn),例如日記或事務(wù)支持。

IOC(控制反轉(zhuǎn))

控制反轉(zhuǎn)——Spring通過一種稱作控制反轉(zhuǎn)(IoC)的技術(shù)促進(jìn)了低耦合。當(dāng)應(yīng)用了I。

C,一個(gè)對(duì)象依賴的其它對(duì)象會(huì)通過被動(dòng)的方式傳遞進(jìn)來,而不是這個(gè)對(duì)象自己創(chuàng)建或者

查找依賴對(duì)象。你可以認(rèn)為IoC與JNDI相反——不是對(duì)象從容器中查找依賴,而是容器在

對(duì)象初始化時(shí)不等對(duì)象請(qǐng)求就積極將依賴傳遞給它。

一般都是調(diào)用者依賴被調(diào)用者,使用ioc后對(duì)象不會(huì)被直接調(diào)用,而是通過ioc容器來積極

提供

容器

-Spring包含并管理應(yīng)用對(duì)象的配置和生命周期,在這個(gè)意義上它是一種容器,你可以配

置你的每個(gè)bean如何被創(chuàng)建---基于一個(gè)可配置原型(Prototype),你的bean可以創(chuàng)建-一個(gè)

單獨(dú)的實(shí)例或者每次需要時(shí)都生成一個(gè)新的實(shí)例——以及它們是如何互相關(guān)聯(lián)的。然而,

Spring不應(yīng)當(dāng)被混同于傳統(tǒng)的重量級(jí)的EJB容器,它們經(jīng)常是龐大與笨重的,難以使

用。

框架

-Spring可以將簡(jiǎn)樸的組件配置、組合成為復(fù)雜的應(yīng)用。在Spring中,應(yīng)用對(duì)象被聲

明式地組合,典型地是在一個(gè)XML文獻(xiàn)里。Spring也提供了很多基礎(chǔ)功能(事務(wù)管理、

持久化框架集成等等),將應(yīng)用邏輯的開發(fā)留給了你。

MVC

-Spring的作用是整合,但不僅僅限于整合,Spring框架可以被看做是一個(gè)公司解決

方案級(jí)別的框架。客戶端發(fā)送請(qǐng)求,服務(wù)器控制器(由DispatcherServ1et實(shí)現(xiàn)的)完

畢請(qǐng)求的轉(zhuǎn)發(fā),控制器調(diào)用一個(gè)用于映射的類HandlerMapping,該類用于將請(qǐng)求映射到相

應(yīng)的解決器來解決請(qǐng)求。HandIerMapping將請(qǐng)求映射到相應(yīng)的解決器Controller

(相稱于Action)在Spring當(dāng)中假如寫一些解決器組件,一般實(shí)現(xiàn)Controiler

接口,在Controller中就可以調(diào)用一些Service或DAO來進(jìn)行數(shù)據(jù)操作ModelAndV

iew用于存放從DAO中取出的數(shù)據(jù),還可以存放響應(yīng)視圖的一些數(shù)據(jù)。假如想將解決結(jié)

果返回給用戶,那么在Spring框架中還提供一個(gè)視圖組件ViewReso1ver,該組件根據(jù)

Controller返回的標(biāo)示,找到相應(yīng)的視圖,將響應(yīng)response返回給用戶

AoP是面向?qū)ο箝_發(fā)的一種補(bǔ)充,可以在不改變本來的業(yè)務(wù)邏輯的基礎(chǔ)上動(dòng)態(tài)的增

長(zhǎng)一些功能,比如增長(zhǎng)例子異常解決

AOP面向切面編程。解耦是程序員編碼開發(fā)過程中一直追求的。AOP也是為了解耦所誕

生。AOP在Spring框架中被作為核心組成部分之一,最常見的就是事務(wù)控制,日記記錄

OOP(面向?qū)ο缶幊蹋┽槍?duì)業(yè)務(wù)解決過程的實(shí)體及其屬性和行為進(jìn)行抽象封裝,以獲得更加

清楚高效的邏輯單元?jiǎng)澐帧?/p>

而AOP則是針對(duì)業(yè)務(wù)解決過程中的切面進(jìn)行提取,它所面對(duì)的是解決過程中的某個(gè)環(huán)節(jié)或

階段,以獲得邏輯過程中各部分之間低耦合性的隔離效果。這兩種設(shè)計(jì)思想在目的上有著

本質(zhì)的差異。

特點(diǎn)/優(yōu)點(diǎn)

特點(diǎn)

1.方便解耦,簡(jiǎn)化開發(fā)

通過Spring提供的I。C容器,我們可以將對(duì)象之間的依賴關(guān)系交由

Spring進(jìn)行控制,避免硬編碼所導(dǎo)致的過度程序耦合。有了Spring,用戶不必

再為單實(shí)例模式類、屬性文獻(xiàn)解析等這些很底層的需求編寫代碼,可以更專注于

上層的應(yīng)用。

2.A0P編程的支持

通過Spring提供的AOP功能,方便進(jìn)行面向切面的編程,許多不容易用傳統(tǒng)OOP實(shí)現(xiàn)的

功能可以通過AOP輕松應(yīng)付。

3.聲明式事務(wù)的支持

在Spring中,我們可以從單調(diào)煩悶的事務(wù)管理代碼中解脫出來,通過聲明式方式靈

活地進(jìn)行事務(wù)的管理,提高開發(fā)效率和質(zhì)量。

優(yōu)點(diǎn)

1.低侵入式設(shè)計(jì),代碼污染極低

2.獨(dú)立于各種應(yīng)用服務(wù)器,基于Spring框架的應(yīng)用,可以真正實(shí)現(xiàn)WriteOnce,Run

Anywhere的承諾

3.Spring的DI機(jī)制減少了業(yè)務(wù)對(duì)象替換的復(fù)雜性,提高了組件之間的解耦

4.Spring的AOP支持允許將一些通用任務(wù)如安全、事務(wù)、日記等進(jìn)行集中式管理,從而提

供了更好的復(fù)用

5.Spring的ORM和DAO提供了與第三方持久層框架的良好整合,并簡(jiǎn)化了底層的數(shù)據(jù)庫(kù)訪

6.Spring并不強(qiáng)制應(yīng)用完全依賴于Spring,開發(fā)者可自由選用Spring框架的部分或所有

實(shí)現(xiàn)不同類型的參數(shù)注入

1.注入直接量

可以通過<value>標(biāo)簽進(jìn)行注入

2.引入其他bean組件

使用標(biāo)簽<ref>屬性一般用bean

3.注入集合類型的屬性

<list><setxmapXproperties>具體配置詳見參數(shù)

Beaii的作用域

Singletton默認(rèn)值:Spring以單例模式創(chuàng)建bean的實(shí)例,即容器中該bean的實(shí)例只有

一個(gè)

Prototype:每次從容器中獲取bean時(shí)都會(huì)創(chuàng)建一個(gè)實(shí)例

Request:用于web應(yīng)用環(huán)境,針對(duì)每次http請(qǐng)求都會(huì)創(chuàng)建一個(gè)實(shí)例

Session:用于web環(huán)境,同一個(gè)會(huì)話共享一個(gè)實(shí)例,

Bean注入的方式

屬性注入

構(gòu)造方法注入

在Spring配置文獻(xiàn)中實(shí)現(xiàn)自動(dòng)裝配

<bean>元素的autowire屬性提供了一種自動(dòng)注入依賴對(duì)象的機(jī)制,配置bean時(shí)不需要做

任何顯式地指定,Spring會(huì)自動(dòng)查找符合條件的依賴對(duì)象并實(shí)行注入提供了四種自動(dòng)裝

配的類型

No:默認(rèn)值,Spring默認(rèn)不進(jìn)行自動(dòng)裝配,必須顯式指定依賴關(guān)系

ByName:根據(jù)屬性名自動(dòng)裝配,會(huì)查找與屬性名相同的id,

Bytype根據(jù)屬性的類型積極裝配

Constructor和bytype類似,但是它針對(duì)構(gòu)造方法,假如Spring找到一個(gè)bean和構(gòu)造方

法的參數(shù)類型相匹配,則通過構(gòu)造方法注入該依賴對(duì)象,找不到拋出異常

Spring常用注解

注解說明

?注冊(cè)注解解決器

,方式一:bean

<beanclass='*org.springframework.beans.factory.annotation.

AutowiredAnnotationBeanPostProcessor'7>

?方式二:命名空間<context:annotation-config/>

<context:annotationconfig/>將隱式地向Spring容器注冊(cè)AutowiredAnnotati

onBeanPostProcessor>CommonAnnotationBeanPostProcessor>PersistenceAn

notationBeanPostProcessor以及RequiredAnnotationBeanPostProcessor這

4個(gè)BeanPostProcessoro

,方式三:命名空間Vcontext:component-scan/>

假如要使注解工作,則必須配置component-scan,事實(shí)上不需要再配置annotation-config?

base—package屬性指定了需要掃描的類包,類包及其遞歸子包中所有的類都會(huì)被解決。

還允許定義過濾器將基包下的某些類納入或排除。

啟用SpringMVC注解

?啟動(dòng)SpringMVC的注解功能,完畢請(qǐng)求和注解POJO的映射

.<beanclass=*'org.springframework.web.servlet.mvc.annotation.Annotati

onMethodHandlerAdapter"/>

注解介紹

?@Contro11er

?@Service

?@Autowired

?@RequestMapping

?@RequestParam

?@ModelAttribute

?@Resource

?@Repository

,@Component(不推薦使用)

?@Scope

?@SessionAttributes

?@InitBinder

?@Required

?@Qualifier

l.@Control1er

?例如

@Contro11er

publicclassSoftCreateControIlerextendsSimp1eBaseController

()

-或者

@Contro11er(nsoftCreateController1')

?說明

@ControHer負(fù)責(zé)注冊(cè)一個(gè)bean到spring上下文中,bean的ID默認(rèn)為類名

稱開頭字母小寫

2.@Service

?例如

@Service

pub1icc1assSoftCreateServicelmp1implementsISoftCreateS

ervice{}

或者

@Service("softCreateServiceImpl'*)

?說明

@Service負(fù)責(zé)注冊(cè)一個(gè)bean到spring上下文中,bean的ID默認(rèn)為類名稱開

頭字母小寫

3.@Autowired

?例如

@Autowire"privateISoftPMServicesoftPMService;

?或者

@Autowired(required=false)aprivateISoftPMServicesoftPMSer

vice=newSoftPMServicelmpl();

?說明

@Autowired根據(jù)bean類型從spring上線文中進(jìn)行查找,注冊(cè)類型必須唯一,否則

報(bào)異常。與@Resource的區(qū)別在于,@Resource允許通過bean名稱或bean類型兩

種方式進(jìn)行查找@Autowired(required=false)表達(dá),假如spring上下文中沒有

找到該類型的bean時(shí),才會(huì)使用newSoftPMServiceImpl();

@Autowired標(biāo)注作用于Map類型時(shí),假如Map的key為String類型,則Spring

會(huì)將容器中所有類型符合M叩的value相應(yīng)的類型的Bean增長(zhǎng)進(jìn)來,用Bean的id或na

me作為Map的key。

@Autowired尚有一個(gè)作用就是,假如將其標(biāo)注在BeanFactory類型、Appli

cationContext類型、ResourceLoader類型、ApplicationEventPublisher

類型、MessageSource類型上,那么Spring會(huì)自動(dòng)注入這些實(shí)現(xiàn)類的實(shí)例,不需要額

外的操作。

4.@RequestMapping

.類

@Controller

@RequestMapping(0/bbtForum.do”)

pub1icclassBbtForumControl1er{a@RequestMapping(para

ms="method=listBoardTopic”)

pub1icString1istBoardTopic(inttopicId,Useruser){}A}

?方法

@RequestMapping,/softpg/downSoftPg.do">@RequestMap

ping(va1ue="/softpg/ajaxLoadSoftld.do',,method=POST)

@RequestMapping(value="/osu/product/detai1.do”,params=

{nmodify=falsen},method=POST)

?說明

@RequestMapping可以聲明到類或方法上

?參數(shù)綁定說明A假如我們使用以下的URL請(qǐng)求:

http://IocaIhost/bbtForum.do?method=listBoardTopic&topicId=1

&userld=1O&userName=tom

topicIdURL參數(shù)將綁定到topicld入?yún)⑸希鴘serid和userNameURL參數(shù)將綁

定到user對(duì)象的userId和userName屬性中。和URL請(qǐng)求中不允許沒有topic

Id參數(shù)不同,雖然User的userid屬性的類型是基本數(shù)據(jù)類型,但假如URL中不存在use

rId參數(shù),Spring也不會(huì)報(bào)錯(cuò),此時(shí)user.userid值為0。假如User對(duì)象擁有一個(gè)dept.de

ptld的級(jí)聯(lián)屬性,那么它將和dept.deptldURL參數(shù)綁定。

5.@RequestParam

?參數(shù)綁定說明

@RequestParam(nid")

http://locaIhost/bbtForum.do?method=listBoardTopic&id=1&use

rld=1O&userName=tom

1istBoardTopic(@RequestParam(Hid")inttopicId,Useruser)中的topicld綁定

到id這個(gè)URL參數(shù),那么可以通過對(duì)入?yún)⑹褂聾RequestParam注解來達(dá)成目的

@RequestParam(required=false):參數(shù)不是必須的,默認(rèn)為true

@RequestParam(va1ue="idu,required=false)

請(qǐng)求解決方法入?yún)⒌目蛇x類型

?Java基本數(shù)據(jù)類型和String

默認(rèn)情況下將按名稱匹配的方式綁定到URL參數(shù)上,可以通過@Re

questParam注解改變默認(rèn)的綁定規(guī)則

?request/response/session

既可以是ServletAPI的也可以是Port1etAPI相應(yīng)的對(duì)象,Spring會(huì)將它們綁定到Servl

et和P。rtlet容器的相應(yīng)對(duì)象上

?org.springframework.web.context.request.WebRequest

內(nèi)部包含了request對(duì)象

?java.util.Locale

綁定到request相應(yīng)的Locale對(duì)象上

?java.io.InputStreanVjava.io.Reader

可以借此訪問request的內(nèi)容

?java.io.OutputStream/java.io.Writer

可以借此操作response的內(nèi)容

?任何標(biāo)注了@RequestParam注解的入?yún)?/p>

被標(biāo)注@RequestParam注解的入?yún)⒔壎ǖ教囟ǖ膔equest參數(shù)上。

?java.util.Map/org.springframework.ui.ModeIMap

它綁定SpringMVC框架中每個(gè)請(qǐng)求所創(chuàng)建的潛在的模型對(duì)象,它們可以被Web視圖對(duì)

象訪問(如JSP)

?命令/表單對(duì)象(注:一般稱綁定使用HTTPGET發(fā)送的URL參數(shù)的對(duì)象為命令對(duì)

象,而稱綁定使用HTTPPOST發(fā)送的URL參數(shù)的對(duì)象為表單對(duì)象)

它們的屬性將以名稱匹配的規(guī)則綁定到URL參數(shù)上,同時(shí)完畢類型的轉(zhuǎn)換。

而類型轉(zhuǎn)換的規(guī)則可以通過@1nitBinder注解或通過HandlerAdapter的

配置進(jìn)行調(diào)整

A?org.springframework.validation.Errors/org.springframew

ork.validation.BindingResuit

為屬性列表中的命令/表單對(duì)象的校驗(yàn)結(jié)果,注意檢查結(jié)果參數(shù)必須緊跟在命

令/表單對(duì)象的后面

,org.springframework.web.bind.support.SessionStatus

可以通過該類型status對(duì)象顯式結(jié)束表單的解決,這相稱于觸發(fā)session清除其中的

通過@SessionAttributes定義的屬性

請(qǐng)求解決方法返回值的可選類型

?void

此時(shí)邏輯視圖名由請(qǐng)求解決方法相應(yīng)的URL擬定,如以下的方法:A@RequestMapping("

/we1come.dou)

publicvoidwe1comeHandler(){}

相應(yīng)的邏輯視圖名為“welcome”

?String

此時(shí)邏輯視圖名為返回的字符,如以下的方法:A@RequestMapping(method=Re

questMethod.GET)

publicStringsetupForm(@RequestParam("ownerld")intownerld,Mo

delMapmodel){

Ownerowner=this.clinic.load0wner(ownerId);

model.addAttribute(owner);^return"ownerForm";

}△相應(yīng)的邏輯視圖名為“ownerFormM

,org.springframework.ui.ModelMap

和返回類型為void同樣,邏輯視圖名取決于相應(yīng)請(qǐng)求的URL,如下面的例子:A@Reques

tMapping('7vets.do")Apub1icModelMapvetsHand1er(){

returnnewMode1Map(this.clinic.getVets());

相應(yīng)的邏輯視圖名為“vets”,返回的ModelMap將被作為請(qǐng)求相應(yīng)的模型對(duì)象,可以

在JSP視圖頁面中訪問到。

?Mode1AndVieWA當(dāng)然還可以是傳統(tǒng)的ModelAndViewo

@ModelAttribute

?作用域:request

?例如A@RequestMapping("/base/userManageCooper/init.do'*)

publieStringhandlelnit(@ModelAttribute(nqueryBean")Manag

edUsersUser,Modelmode1,){

?或者

@ModelAttribute("coopMap**)//將coopMap返回至I」頁面apublic

Map<Long,CooperatorInfo>coopMapltems(){}

?說明

@ModelAttribute聲明在屬性上,表達(dá)該屬性的value來源于model里"queryBean",并被

保存到model里@乂0(1?從11加)ute聲明在方法上,表達(dá)該方法的返回值被保存到mode

1里

@Resource

?例如

@Resource

privateDataSourcedataSource;//injectthebean

named'dataSource'

?或者

@Resource(name=ndataSource"X@Resource(type=DataSource.c1ass)

?說明

?Resource默認(rèn)按bean的name進(jìn)行查找,假如沒有找到會(huì)按type進(jìn)行查找,

此時(shí)與@Autowi「ed類似

在沒有為@Resource注解顯式指定name屬性的前提下,假如將其標(biāo)注在BeanFa

ctory類型、ApplicationContext類型、ResourceLoader類型、Applieatio

nEventPublisher類型、MessageSource類型上,那么Spring會(huì)自動(dòng)注入這些實(shí)

現(xiàn)類的實(shí)例,不需要額外的操作。此時(shí)name屬性不需要指定(或者指定為,否則

注入失??;

@Repository

?與@€k)111roller、@Service類似,都是向spring上下文中注冊(cè)bean,不在贅述。

@Component(不推薦使用)

?@Component

(?Component是所有受Spring管理組件的通用形式,Spring還提供了更加細(xì)化的注解

形式:@Repository@Service>@Controller,它們分別相應(yīng)存儲(chǔ)層Bean,業(yè)務(wù)層Be

an,和展示層Bean。

目前版本(2.5)中,這些注解與@Comp。nent的語義是同樣的,完全通用,在Spring以

后的版本中也許會(huì)給它們追加更多的語義。所以,我們推薦使用@Repository、@Ser

vice>@Control1er來替代@Component。

@Scope

?例如

@Scope(nsession")

@Repository()

publicclassUserSessionBeanimplementsSerializable{}

?說明

在使用XML定義Bean時(shí),可以通過bean的scope屬性來定義一個(gè)Bean的作用范圍,A

同樣可以通過@Scope注解來完畢

@Scope中可以指定如下值:

sing1eton:定義bean的范圍為每個(gè)spring容器一個(gè)實(shí)例(默認(rèn)值)

Prototype:定義bean可以被多次實(shí)例化(使用一次就創(chuàng)建一次)

request:定義bean的范圍是http請(qǐng)求(springMVC中有效)

session:定義bean的范圍是http會(huì)話(springMVC中有效)

g1obal-session淀義bean的范圍是全局http會(huì)話(portlet中有效)

@SessionAttributes

?說明

Spring允許我們有選擇地指定ModeIM叩中的哪些屬性需要轉(zhuǎn)存到session中,A以便

下一個(gè)請(qǐng)求屬相應(yīng)的ModelMap的屬性列表中還能訪問到這些屬性。A這一功能是通過類定

義處標(biāo)注@SessionAttributes注解來實(shí)現(xiàn)的。

@SessionAttributes只能聲明在類上,而不能聲明在方法上。

?例如

@SessionAttributes("currUser")//將ModeIMap中屬性名為currUser的屬性

@SessionAttributes({"attrl","attr2"})&@SessionAttributes(types=User.c1

ass)

@SessionAttributes(types={User.c1ass,Dept.class})

@SessionAttributes(types={User,c1ass,Dept.class},value={"attiT'Jattr

2"})

@1nitBinder

?說明

假如希望某個(gè)屬性編輯器僅作用于特定的Control1er,A可以在Controller中定義一

個(gè)標(biāo)注@InitBinder注解的方法,

可以在該方法中向Controller了注冊(cè)若干個(gè)屬性編輯器

?例如

@InitBinderepublicvoidinitBinder(WebDataBinderbinder){

Simp1eDateFormatdateFormat=newSimpleDateFormat(*'yyyy-MM-d

d");AdateFormat.setLenient(fa1se);Abinder.registerCustomEditor(Date.cl

ass,newCustomDateEditor(dateFormat,fa1se));

@Required

?例如

@required

publicsetName(Stringname){}

?說明

@required負(fù)責(zé)檢查一個(gè)bean在初始化時(shí)其聲明的set方法是否被執(zhí)行,當(dāng)

某個(gè)被標(biāo)注了?Required的Setter方法沒有被調(diào)用,則Spring在解析的時(shí)候會(huì)拋

出異常,以提醒開發(fā)者對(duì)相應(yīng)屬性進(jìn)行設(shè)立。?Required注解只能標(biāo)注在Setter方法

之上。由于依賴注入的本質(zhì)是檢查Setter方法是否被調(diào)用了,而不是真的去檢查屬性是否

賦值了以及賦了什么樣的值。假如將該注解標(biāo)注在非setXxxx()類型的方法則被忽略。

@Qua1ifier

?例如

@Autowired

@Qua1ifier("softService")△privateISoftPMServicesof

tPMService;

?說明

使用@Autowired時(shí),假如找到多個(gè)同一類型的bean,則會(huì)拋異常,此時(shí)可以使

用@Qualifier("beanName"),明確指定bean的名稱進(jìn)行注入,此時(shí)與@Resource指

定name屬性作用相同。

SSH框架整合知識(shí)點(diǎn)

環(huán)節(jié)

1.添加3個(gè)框架的jar文獻(xiàn),并創(chuàng)建相關(guān)的配置文獻(xiàn)

2.為Hibernate配置數(shù)據(jù)源對(duì)象

3.配置sessionfactory對(duì)象

4.實(shí)現(xiàn)并配置Dao和service

5.使用Spring簡(jiǎn)化數(shù)據(jù)庫(kù)事務(wù)解決,及配置聲明式事務(wù)管理

6.實(shí)現(xiàn)并配置Action

2-5部操作屬于Spring整合hibernate,

環(huán)節(jié)6屬于Spring整合Struts2

1?.在Spring容器中配置c3po數(shù)據(jù)源

目前流行的數(shù)據(jù)源框架有dbcpc3po,目前常用的是c3Po需要導(dǎo)入的包c(diǎn)3po—0.9.1.2.

jar

在web容器中配置數(shù)據(jù)源

2.配置sessionfactory對(duì)象

Annotationsessionfactorybean^sessionfactory的實(shí)現(xiàn)類,它同時(shí)支持hiber

nate中的XML和annotation映射配置,

mappingResources屬性用來指定XML映射文獻(xiàn),假如在開發(fā)中配置\'持久化類的配置

問價(jià)非常多的時(shí)候,可以在mappingLocations屬性中使用通配符來匹配多個(gè)映射文獻(xiàn)

3實(shí)現(xiàn)并配置Dao和service

實(shí)現(xiàn)Dao

在眾多的dao中抽取公共的代碼形成basedao,dao集成basedao,由于basedao接口的實(shí)

現(xiàn)被不同的dao繼承,所以basedao被聲明形成了泛型接口,其中的類型T可以在繼承時(shí)

再去擬定,這樣就可以讓basedao實(shí)現(xiàn)多個(gè)表的持久化功能,

關(guān)鍵代碼

PrivateClass<T>entityclass;

Entityclass=(c1ass<T>)((parameterizedType))getClass().getGenericSuperc

lass()).getActualTypeArguments()[0]〃單basedaoimp1VT>被繼承時(shí),使用該代碼可以

獲取T的類型,現(xiàn)在basedao的無參構(gòu)造方法里

實(shí)現(xiàn)service

定義相應(yīng)的接口和實(shí)現(xiàn)類,和定義d

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論