第一,分清容器和工具的區(qū)別
Spring是容器席舍,它的特性是IoC和DI,所以来颤,可以先配置起來(lái)汰扭,因?yàn)橄纫羞@個(gè)容器福铅,才談得上往這個(gè)容器中放進(jìn)需要的東西。當(dāng)然滑黔,也可以先有Hibernate 或者Struts這兩個(gè)工具中的其一环揽,但邏輯上不好理解。
第二歉胶,分步驟配置
因?yàn)榕渲梦募膹?fù)雜關(guān)系,我們?cè)谂渲玫臅r(shí)候巴粪,極易造成混亂。比如在Spring配置文件中配置實(shí)例化的時(shí)候肛根,需要先對(duì)實(shí)體類(lèi)映射文件進(jìn)行配置,需要對(duì)現(xiàn)有Action,Service,Dao進(jìn)行關(guān)聯(lián)配置晶通。
所以哟玷,我們可以在配置時(shí),根據(jù)需要分布進(jìn)行巢寡。在配置完Spring容器后喉脖,對(duì)其完整性和系統(tǒng)性進(jìn)行驗(yàn)證抑月,確保它的獨(dú)立運(yùn)行是正常的。同理谦絮,在配置Hibernate和Struts2的時(shí)候,也要先對(duì)他們各自的獨(dú)立功能進(jìn)行驗(yàn)證层皱,確保各自能獨(dú)立運(yùn)行性锭。
第三叫胖,Spring接管
我們知道,Hibernate是針對(duì)持久層也就是數(shù)據(jù)庫(kù)的操作瓮增,我們可以用直接操作實(shí)體類(lèi)數(shù)據(jù)的方式來(lái)代替對(duì)數(shù)據(jù)庫(kù)記錄的操作,它依賴(lài)SessionFactory產(chǎn)生的Session對(duì)象來(lái)進(jìn)行操作绷跑。這個(gè)SessionFactory就相當(dāng)于數(shù)據(jù)庫(kù)中的DataSource拳恋,既然Spring可以管理DataSource你踩,所以也理應(yīng)可以管理SessionFactory讳苦。確實(shí)是這樣,只需要將Dao的實(shí)現(xiàn)類(lèi)繼承HibernateDaoSupport即可鸳谜。這樣我們就很容易在Spring的配置文件中對(duì)SessionFactory進(jìn)行實(shí)例化,并在Dao實(shí)例中注入這個(gè)sessionFactory式廷。除此以外,還要將sessionFactory注入到HibernateTemplate里面滑废,因?yàn)镾pring會(huì)根據(jù)sessionFactory 生成模版,由模版進(jìn)行對(duì)持久層增刪改查的操作蠕趁。
當(dāng)然薛闪,隨后一定不要忘記在配置文件中配置包掃描和事務(wù)管理器俺陋。
第四,注解
加注解的地方主要有持久層腊状,業(yè)務(wù)層,動(dòng)作層缴挖,還有實(shí)體類(lèi)文件中。
持久層主要就是為持久層命名映屋,以便業(yè)務(wù)層的屬性注入苟鸯。并且將私有的HibernateTemplate注解上@Autowired或@Resource棚点,以便通過(guò)配置文件創(chuàng)建對(duì)象。
業(yè)務(wù)層乙濒,除了為業(yè)務(wù)層命名和將持久層的相關(guān)對(duì)象注入之外陕赃,還要加上事務(wù)颁股。注入持久層對(duì)象的方法和持久層注入HibernateTemplate的方法如出一轍。配置事務(wù)可以在方法上甘有,也可以在業(yè)務(wù)層的類(lèi)上面,但是方法的優(yōu)先級(jí)高于類(lèi)上的亏掀。
動(dòng)作層忱反,在類(lèi)上面,要加的四個(gè)注解是@Controller,@Scope,@ParentPackage和@Namespace温算,相應(yīng)的取值依自身需求而定。每個(gè)動(dòng)作類(lèi)的action方法上都要加上@Action并指明其name和results屬性注竿。results屬性表示動(dòng)作方法執(zhí)行成功或失敗后跳轉(zhuǎn)到頁(yè)面或其他方法的動(dòng)作茄茁,其中有name巩割,type,location三個(gè)屬性宣谈,取值按需求而定愈犹。
到這里闻丑,如果沒(méi)有導(dǎo)錯(cuò)包,應(yīng)該就完成了三大框架的整合梆掸。