版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Spring SSH整合 學(xué)習(xí)筆記-wjt2762010-05-14目錄第一課:面向抽象編程4第二課:Jdom的基本使用4第三課:模擬Spring功能5第四課:搭建sping的運(yùn)行環(huán)境8一、建立一個(gè)新的項(xiàng)目8二、建立spring的配置文件8三、引入spring的jar包8四、測(cè)試代碼:8五、注意接口的使用:8第五課:IOC(DI)配置及應(yīng)用9一、什么是IOC、DI9二、編輯xml文件時(shí),沒有提示9三、注入類型(Injecting dependencies)9(一)setter注入類型Setter Injection9(二)構(gòu)造方法Constructor Injection10四、id、name
2、11五、簡(jiǎn)單屬性的注入11六、Bean的作用范圍scope12七、集合注入12八、自動(dòng)裝配autowire13(一)byName13(二)byType14(三)注意14九、生命周期15(一)lazy-init/default-lazy-init15(二)init-method destroy-method 不要和prototype一起用(了解)15第六課:annotation方式Spring16一、開始使用annotation配置Spring16二、Autowired、Qualifier16(一)Autowired16(二)Qualifier17三、Resource(重要、推薦)17(一)JS
3、R-25017(二)Resource17四、Componet18五、Scope、PostConstruct、PreDestroy19六、注解對(duì)應(yīng)的jar包19第七課:AOP(面向切面編程)19一、AOP概念19二、利用動(dòng)態(tài)代理實(shí)現(xiàn)面向切面編程20第八課:Spring AOP配置選項(xiàng)21一、AOP配置annotation方式21(一)搭建annotation開發(fā)環(huán)境21(二)aspectJ類庫22(三)AOP的annotation實(shí)例22(四)AspectJ的專業(yè)術(shù)語23(五)織入點(diǎn)語法23(六)Advice24(七)Pointcut26(八)annotatin方式的AOP實(shí)例26二、AOP配置
4、xml方式27三、AOP實(shí)現(xiàn)動(dòng)態(tài)代理注意28第九課:DataSource28一、Sping配置數(shù)據(jù)源:28二、注入使用29三、dbcp.BasicDataSource29第十課 Spring整合Hiberante330一、Spring配置hibernate3的SessionFactory30(一)xml形式的SessionFactory30(二)annotation注解方式的SessionFactory30二、引入hibernate所需要使用的jar31(一)基本jar31(二)加入annotation功能的jar包31(三)搭建日志環(huán)境并配置顯示DDL語句jar包31三、Spring整合hi
5、bernate3事務(wù)31(一)Annotation注解方式配置事務(wù)管理31(二)Spring事務(wù)選項(xiàng)35(三)XML文件形式配置Spring事務(wù)管理37四、HibernateTemplate38(一)HibernateTemplate38(二)HibernateDaoSupport39第十一課:Spring整合-SSH40一、第一步:加入jar包(需要的jar包列表)40二、第二步: 首先整合Spring + Hibernate41三、第三步:再來整合Struts241四、struts的讀常量:43第十二課:DTO、VO43一、DTO43二、VO43第十二課:SSH整合存在的問題43一、Jsp
6、中訪問Session時(shí),Session已經(jīng)關(guān)閉43二、如果不配置事務(wù),openSessionView出現(xiàn)異常44三、中文亂碼問題:44第十三課:SSH整合的jar包45一、Struts245二、Hibernate3.3.245三、Spring46第一課:面向抽象編程原來什么類都是寫死的,現(xiàn)在是先建立一個(gè)大的標(biāo)準(zhǔn),然后再各個(gè)實(shí)體類來實(shí)現(xiàn)他們的功能,然后在調(diào)用的時(shí)候,使用這個(gè)標(biāo)準(zhǔn)調(diào)用,這樣,你們哪個(gè)來都可以被調(diào)用。實(shí)例:User實(shí)體類public class User private String username;private String password;public String get
7、Username() return username;public void setUsername(String username) this.username = username;public String getPassword() return password;public void setPassword(String password) this.password = password;UserDao接口public interface UserDao public void save(User u);UserDao的實(shí)現(xiàn)UserDaoImplpublic class User
8、DaoImpl implements UserDao Overridepublic void save(User u) System.out.println(user save.);User管理類public class UserService /這里需要什么的實(shí)現(xiàn),在new時(shí),就new什么的實(shí)現(xiàn),在調(diào)用方法時(shí),會(huì)調(diào)用具體的實(shí)現(xiàn)類的方法private UserDao userDao = new UserDaoImpl();public UserDao getUserDao() return userDao;public void setUserDao(UserDao userDao) this
9、.userDao = userDao;public void add(User u)userDao.save(u);/這里可以調(diào)用任務(wù)實(shí)現(xiàn)了UserDao接口的save方法了。第二課:Jdom的基本使用test.xml 8G 200 1580 10G 500 3000 實(shí)例類:public class Sample1 public static void main(String args) throws Exception SAXBuilder sb=new SAXBuilder();/創(chuàng)建一個(gè)SAXBuilder對(duì)象Document doc=sb.build(Sample1.class.ge
10、tClassLoader().getResourceAsStream(test.xml); /構(gòu)造文檔對(duì)象Element root=doc.getRootElement(); /獲取根元素 List list=root.getChildren(disk);/取名字為disk的所有元素 for(int i=0;ilist.size();i+) Element element=(Element)list.get(i); String name=element.getAttributeValue(name);/獲取元素中屬性為name的值 String capacity=element.getChi
11、ldText(capacity);/取disk子元素capacity的內(nèi)容 String directories=element.getChildText(directories); String files=element.getChildText(files); System.out.println(磁盤信息:); System.out.println(分區(qū)盤符:+name); System.out.println(分區(qū)容量:+capacity); System.out.println(目錄數(shù):+directories); System.out.println(文件數(shù):+files); S
12、ystem.out.println(-); 第三課:模擬Spring功能因?yàn)镾pring是使用xml配置文件來實(shí)現(xiàn)的,所以我們首先模擬一個(gè)xml的配置文件如下:beans.xml實(shí)現(xiàn)的功能:當(dāng)類初始化時(shí),一、 程序會(huì)根據(jù)此配置文件初始化文件所有的bean元素所代表的類,放入一個(gè)容器中(使用Map),然后在需要時(shí),會(huì)根據(jù)ID值,取出這個(gè)對(duì)象;1、 代碼:public class ClassPathXmlApplicationContext implements BeanFactory private Map beans = new HashMap();public ClassPathXmlApp
13、licationContext() throws ExceptionSAXBuilder sb=new SAXBuilder();/創(chuàng)建一個(gè)SAXBuilder對(duì)象 Document doc=sb.build(ClassPathXmlApplicationContext.class.getClassLoader().getResourceAsStream(beans.xml); /構(gòu)造文檔對(duì)象 Element root=doc.getRootElement(); /獲取根元素 /System.out.println(root.getName(); List list=root.getChild
14、ren(bean);/取名字為disk的所有元素 for(int i=0;ilist.size();i+) Element element=(Element)list.get(i); String id = element.getAttributeValue(id); String clazz = element.getAttributeValue(class); System.out.println(id + : + clazz); Object o = Class.forName(clazz).newInstance(); beans.put(id, o); public Object g
15、etBean(String name)return beans.get(name);2、 測(cè)試:BeanFactory factory = new ClassPathXmlApplicationContext();UserService service = new UserService();/UserService service = (UserService)factory.getBean(userService);UserDao userDao = (UserDao)factory.getBean(u);/此得只需要根據(jù)ID就可以取得Bean對(duì)象來使用service.setUserDao
16、(userDao);User u = new User();service.add(u);二、 當(dāng)某一bean元素下存在property子元素時(shí),則需要把這個(gè)子元素作為參數(shù)自動(dòng)注入(使用setXXX方法)到這個(gè)bean對(duì)象中1、 代碼:public class ClassPathXmlApplicationContext implements BeanFactory private Map beans = new HashMap();public ClassPathXmlApplicationContext() throws ExceptionSAXBuilder sb=new SAXBuil
17、der();/創(chuàng)建一個(gè)SAXBuilder對(duì)象 Document doc=sb.build(ClassPathXmlApplicationContext.class.getClassLoader().getResourceAsStream(beans.xml); /構(gòu)造文檔對(duì)象 Element root=doc.getRootElement(); /獲取根元素 List list=root.getChildren(bean);/取名字為disk的所有元素 for(int i=0;ilist.size();i+) Element element=(Element)list.get(i); Str
18、ing id = element.getAttributeValue(id); String clazz = element.getAttributeValue(class); System.out.println(id + : + clazz); Object o = Class.forName(clazz).newInstance(); beans.put(id, o); /* 以下for循環(huán)是實(shí)現(xiàn)模擬spring自動(dòng)裝配(注入)功能 /一開始列出此bean的所有property子元素 for (Element propertyElement : (List)element.getChil
19、dren(property) /獲取property子元素中 屬性為name的值(也就是需要注入的參數(shù)名稱) String name = propertyElement.getAttributeValue(name);/獲取property子元素中 屬性為bean的值 (需要注入?yún)?shù)的類型),此處的bean值是已經(jīng)在上面初始化好了的bean的ID了。 String bean = propertyElement.getAttributeValue(bean); /因此此處獲取指定ID的bean Object beanObject = beans.get(bean); /組成set方法名稱:set
20、 + 第一個(gè)字母大寫 + 其它的字母 String methodName = set + name.substring(0,1).toUpperCase() + name.substring(1); System.out.println(methodName = + methodName); /獲取bean的set方法,參數(shù)(方法名,參數(shù):此參數(shù)的類型) Method m = o.getClass().getMethod(methodName, beanObject.getClass().getInterfaces()0); /使用反映機(jī)制,執(zhí)行method方法,從而實(shí)現(xiàn)注入功能 m.invo
21、ke(o, beanObject); public Object getBean(String name)return beans.get(name);注意,以上有背景色的部分是實(shí)現(xiàn)自動(dòng)裝配(注入)的代碼。2、 測(cè)試public void testAdd_3() throws Exception BeanFactory factory = new ClassPathXmlApplicationContext();UserService service = (UserService)factory.getBean(userService);/以下兩行代碼在實(shí)現(xiàn)注入功能后,將不再需要,因?yàn)槌绦蛟诩?/p>
22、載時(shí),已經(jīng)幫我自動(dòng)注入這個(gè)參數(shù)了。/UserDao userDao = (UserDao)factory.getBean(u);/service.setUserDao(userDao);User u = new User();service.add(u);BeanFactory接口代碼:public interface BeanFactory public Object getBean(String name);第四課:搭建sping的運(yùn)行環(huán)境一、 建立一個(gè)新的項(xiàng)目a) 建立新的目;b) 建立需要的bean類二、 建立spring的配置文件你可以在spring文件中復(fù)制代碼 !-或是下面的方式
23、 - 三、 引入spring的jar包可以建立一個(gè)User Library搭建spring環(huán)境基本的包:spring.jar和commons-logging.jar四、 測(cè)試代碼:public void testAdd_3() throws Exception BeanFactory factory = new ClassPathXmlApplicationContext(beans.xml);UserService service = (UserService)factory.getBean(userService);User u = new User();service.add(u);注意
24、:這里使用的ClassPathXmlApplicationContext和BeanFactory是spring的,如下:import org.springframework.beans.factory.BeanFactory;import org.springframework.context.support.ClassPathXmlApplicationContext;五、 注意接口的使用:ClassPathXmlApplicationContext類實(shí)現(xiàn)了ApplicationContext接口,而ApplicationContext接口又實(shí)現(xiàn)了BeanFactory接口,這樣BeanFa
25、ctory是根上的接口。一般建議使用ApplicationContext接口,因?yàn)椋?、BeanFactory:只是完成Bean工廠的基本功能,不能完成bean的生命周期2、ApplicationContext:除了完成bean工廠的基本功能外,還完成的其它的附加功能(比如:bean的生命周期),也就是功能更強(qiáng)大這樣上面的代碼就是public void testAdd_3() throws Exception ApplicationContext factory = new ClassPathXmlApplicationContext(beans.xml);UserService servic
26、e = (UserService)factory.getBean(userService);User u = new User();service.add(u);第五課:IOC(DI)配置及應(yīng)用一、 什么是IOC、DIIOC: Inversion of Control控制反轉(zhuǎn):原來類的一些成員屬性(例如UserService中的userDao成員屬性)是由當(dāng)前類(UserService)自己控制,而是由容器(運(yùn)行環(huán)境上下文、Spring)幫我們來控制。還是一種說法:原來我們自己控制是控制實(shí)現(xiàn),而現(xiàn)在Spring是利用接口來控制的。所以我們由原來控制實(shí)現(xiàn)轉(zhuǎn)為springg現(xiàn)在來控制接口(向上反轉(zhuǎn)
27、)作用:實(shí)例化具體的bean 動(dòng)態(tài)裝配bean(本來是由我來控制的,現(xiàn)在我交給容器來控制。)DI:Dependency Injection依賴注入:一些成員屬性(例如UserService中的userDao成員屬性) 依賴Spring容器來注入好處:偶合性相對(duì)來降低了;另外,注入是使用配置文件來實(shí)現(xiàn),這樣修改來非常的方便.DI與IOC相對(duì)來說 是一樣的概念。二、 編輯xml文件時(shí),沒有提示1、 window preferences myeclipse Files and Editing - xml xml catalog2、 add按鈕i. Location:D:share0900_Sprin
28、gsoftspring-framework-2.5.6distresourcesspring-beans-2.5.xsdii. URI: file:/D:/share/0900_Spring/soft/spring-framework-2.5.6/dist/resources/spring-beans-2.5.xsdiii. Key Type:Schema Locationiv. Key:/schema/beans/spring-beans-2.5.xsd三、 注入類型(Injecting dependencies)1、 setter(
29、重要)2、 構(gòu)造方法(使用的非常少)3、 接口注入(可以忘記)(一) setter注入類型Setter Injection就是在bean中使用setXXX方法進(jìn)行注入來在bean類中,成員屬性需要setXXX方法如下:public class UserService private UserDao userDao = new UserDaoImpl();public UserDao getUserDao() return userDao;public void setUserDao(UserDao userDao) this.userDao = userDao;public void add(
30、User u)userDao.save(u);spring配置文件如下: !-或是下面的方式 - (二) 構(gòu)造方法Constructor Injection首先在bean類中需要有成員屬性作為參數(shù)的構(gòu)造方法代碼如下:public class UserService private UserDao userDao = new UserDaoImpl();public UserService(UserDao userDao) super();this.userDao = userDao;public UserDao getUserDao() return userDao;public void s
31、etUserDao(UserDao userDao) this.userDao = userDao;public void add(User u)userDao.save(u);注意:背景較深的代碼為構(gòu)造方法,帶有參數(shù)的構(gòu)造方法spring配置文件如下: !- - !- 需要注意的: 使用表示,重新new一個(gè)bean然后注入進(jìn)去, 使用表示,使用已經(jīng)new好的bean,這是只是引用它。 - 使用和其子標(biāo)簽或進(jìn)行構(gòu)造方法注入當(dāng)構(gòu)造方法注入時(shí),構(gòu)造方法中有多個(gè)參數(shù)時(shí),可以使用以下兩種方式注入:bean代碼:public class ExampleBean private int years; pr
32、ivate String ultimateAnswer; public ExampleBean(int years, String ultimateAnswer) this.years = years; this.ultimateAnswer = ultimateAnswer; 1、參數(shù)類型方式進(jìn)行區(qū)分參數(shù):xml配置文件: 注意:這樣就是參數(shù)類型為int的注入7500000,而參數(shù)類型為java.lang.String的參數(shù)注入”42”,但這個(gè)方法不適合多個(gè)參數(shù)是相同的類型。2、利用索引進(jìn)行區(qū)分參數(shù)xml配置文件 注意:index=0的注入到第一個(gè)參數(shù),index=1的注入到第二個(gè)參數(shù)。構(gòu)造
33、方法的注入不方便,所以我們需要使用setter注入方式。四、 id、name注xml配置文件中標(biāo)簽中的屬性名稱如下: 或 以上標(biāo)簽中的屬性id與name作用是一樣,唯一的區(qū)別:id中不可以含有特殊字符,而name中可以有特殊字符五、 簡(jiǎn)單屬性的注入當(dāng)bean中存在簡(jiǎn)單屬性時(shí)的注入方式:bean代碼如下:public class UserDaoImpl implements UserDao private int daoId;private String daoStatus;public int getDaoId() return daoId;public void setDaoId(int d
34、aoId) this.daoId = daoId;public String getDaoStatus() return daoStatus;public void setDaoStatus(String daoStatus) this.daoStatus = daoStatus;Overridepublic void save(User u) System.out.println(user save.);xml配置文件如下: good 直接使用 value屬性或是子標(biāo)簽來注入六、 Bean的作用范圍scope在Spring配置文件中的標(biāo)簽可以指定bean的作用范圍利用標(biāo)簽中的scope屬性來
35、指定scope值:1、 singleton單例:每次取出的bean都是同一個(gè)bean。默認(rèn)就是這個(gè)2、 prototype原型:每次取的bean時(shí),都會(huì)重新創(chuàng)建一個(gè)新的bean 3、 request4、 session5、 globalsession實(shí)例: 注意:只有spring與web框架結(jié)合時(shí)才會(huì)使用request/session/globalsession,但也非常少用,因?yàn)槠渌蚣芤呀?jīng)有功能非常強(qiáng)大的scope了(例如:struts的scope)七、 集合注入很少用,不重要,參考程序 developme
36、a list element followed by a referencean entryjust some stringa refjust some string八、 自動(dòng)裝配autowire含義:在bean注入時(shí)不需要我們來指定注入哪個(gè)具體的bean,而spring容器會(huì)根據(jù)我的使用autowire屬性來確定自動(dòng)裝配功能。autowire值:1、 autodetect;2、 byName:根據(jù)bean中成員屬性的名稱來自動(dòng)裝配3、 byType:根據(jù)bean中成員屬性的類型來自動(dòng)裝配。4、 constaractor5、 default:會(huì)根據(jù)標(biāo)簽中的defaul
37、t-autowire屬性來進(jìn)行自動(dòng)裝配的方式6、 no(默認(rèn)就是這個(gè),需要手動(dòng)指定注入那個(gè)bean)(一) byName根據(jù)bean中成員屬性的名稱來自動(dòng)裝配。bean代碼:UserDaoImpl類public class UserDaoImpl implements UserDao private int daoId;public int getDaoId() return daoId;public void setDaoId(int daoId) this.daoId = daoId;Overridepublic String toString()return daoId= + this.
38、daoId;UserService類public class UserService private UserDao userDao = new UserDaoImpl();public UserDao getUserDao() return userDao;public void setUserDao(UserDao userDao) this.userDao = userDao;public void add(User u)userDao.save(u);spring的配置文件 測(cè)試代碼:public void testAdd_4() throws Exception ApplicationContext factory = new ClassPathXmlApplicationContext(beans.xml);UserService service = (UserService)factory.getBean(userService);System.out.println(service.getUserDao();結(jié)果:daoId=1說明:因?yàn)樵谂渲梦募信渲昧藘蓚€(gè)UserDaoImpl(名稱分別:userDao、userDao2)和一個(gè)UserService類。而在userService的bean中并沒有進(jìn)行注入配置。而是使用了autowire屬性指定了byN
溫馨提示
- 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年湖北中醫(yī)藥高等??茖W(xué)校高職單招職業(yè)適應(yīng)性測(cè)試備考試題有答案解析
- 外賣平臺(tái)合作協(xié)議(2025年評(píng)價(jià)體系)
- 2026年哈爾濱幼兒師范高等??茖W(xué)校高職單招職業(yè)適應(yīng)性測(cè)試備考題庫帶答案解析
- 2026年菏澤家政職業(yè)學(xué)院?jiǎn)握芯C合素質(zhì)筆試參考題庫帶答案解析
- 2026年湖南工程職業(yè)技術(shù)學(xué)院?jiǎn)握芯C合素質(zhì)筆試備考題庫帶答案解析
- 停車場(chǎng)租賃合同2025年修訂版
- 2026年成都工貿(mào)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能考試模擬試題帶答案解析
- 2026年黑龍江生物科技職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能筆試備考題庫帶答案解析
- 2026年常州機(jī)電職業(yè)技術(shù)學(xué)院?jiǎn)握芯C合素質(zhì)筆試模擬試題帶答案解析
- 2026年云南旅游職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能考試模擬試題附答案詳解
- 飼料廠現(xiàn)場(chǎng)品控年度工作總結(jié)
- SMT工作總結(jié)和計(jì)劃
- 羽毛球館創(chuàng)業(yè)計(jì)劃
- 村監(jiān)委申請(qǐng)書
- 北京市北師大附中2024-2025學(xué)年高一上學(xué)期期末考試數(shù)學(xué)試卷(含答案)
- 市政工程施工機(jī)械管理制度
- 帶貨主播年終述職報(bào)告
- JJF 1375-2024機(jī)動(dòng)車發(fā)動(dòng)機(jī)轉(zhuǎn)速測(cè)量?jī)x校準(zhǔn)規(guī)范
- DL∕T 1512-2016 變電站測(cè)控裝置技術(shù)規(guī)范
- GB/T 4074.6-2024繞組線試驗(yàn)方法第6部分:熱性能
- 危險(xiǎn)源辨識(shí)、風(fēng)險(xiǎn)評(píng)價(jià)、風(fēng)險(xiǎn)控制措施清單-05變電站工程5
評(píng)論
0/150
提交評(píng)論