版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024礦山勞務(wù)承包合同范本
- 2024質(zhì)押式借款合同范本
- 2024綠植花卉租賃合同(詳細(xì)版)
- 2024自家租房簡(jiǎn)單合同范本
- 2024計(jì)算機(jī)軟件著作權(quán)登記委托代理合同范文
- 2024無線覆蓋合同模板
- 2024洲際酒店管理合同
- 深圳大學(xué)《應(yīng)用光學(xué)實(shí)驗(yàn)》2021-2022學(xué)年第一學(xué)期期末試卷
- 創(chuàng)業(yè)策劃書集錦15篇
- 美容院消費(fèi)股東協(xié)議書(2篇)
- 生產(chǎn)流程(線)外包服務(wù)規(guī)范 -DB13-T 5224-2020 河北
- 部編人教版道德與法治一年級(jí)上冊(cè):6校園里的號(hào)令教學(xué)設(shè)計(jì)(2課時(shí))
- 2021人音版小學(xué)音樂六年級(jí)上冊(cè)課程綱要
- 三秦思語(2022年陜西中考語文試卷散文閱讀題及答案)
- 2024年秋新外研版(三起)英語三年級(jí)上冊(cè)全冊(cè)教案(2024年新教材)
- 2024-2030年中國(guó)銅線行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略分析報(bào)告
- 【道法】認(rèn)識(shí)生命 課件-2024-2025學(xué)年統(tǒng)編版道德與法治七年級(jí)上冊(cè)
- 貴州省建筑與裝飾工程計(jì)價(jià)定額(2016版)
- JGT 486-2015 混凝土用復(fù)合摻合料
- 世界急救日常見的急救基本知識(shí)科普講座課件
- 鄉(xiāng)村振興民宿產(chǎn)業(yè)項(xiàng)目可行性研究報(bào)告
評(píng)論
0/150
提交評(píng)論