spring2.5 學習筆記_第1頁
spring2.5 學習筆記_第2頁
spring2.5 學習筆記_第3頁
spring2.5 學習筆記_第4頁
spring2.5 學習筆記_第5頁
已閱讀5頁,還剩42頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Spring SSH整合 學習筆記-wjt2762010-05-14目錄第一課:面向抽象編程4第二課:Jdom的基本使用4第三課:模擬Spring功能5第四課:搭建sping的運行環(huán)境8一、建立一個新的項目8二、建立spring的配置文件8三、引入spring的jar包8四、測試代碼:8五、注意接口的使用:8第五課:IOC(DI)配置及應用9一、什么是IOC、DI9二、編輯xml文件時,沒有提示9三、注入類型(Injecting dependencies)9(一)setter注入類型Setter Injection9(二)構造方法Constructor Injection10四、id、name

2、11五、簡單屬性的注入11六、Bean的作用范圍scope12七、集合注入12八、自動裝配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六、注解對應的jar包19第七課:AOP(面向切面編程)19一、AOP概念19二、利用動態(tài)代理實現(xiàn)面向切面編程20第八課:Spring AOP配置選項21一、AOP配置annotation方式21(一)搭建annotation開發(fā)環(huán)境21(二)aspectJ類庫22(三)AOP的annotation實例22(四)AspectJ的專業(yè)術語23(五)織入點語法23(六)Advice24(七)Pointcut26(八)annotatin方式的AOP實例26二、AOP配置

4、xml方式27三、AOP實現(xiàn)動態(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事務31(一)Annotation注解方式配置事務管理31(二)Spring事務選項35(三)XML文件形式配置Spring事務管理37四、HibernateTemplate38(一)HibernateTemplate38(二)HibernateDaoSupport39第十一課:Spring整合-SSH40一、第一步:加入jar包(需要的jar包列表)40二、第二步: 首先整合Spring + Hibernate41三、第三步:再來整合Struts241四、struts的讀常量:43第十二課:DTO、VO43一、DTO43二、VO43第十二課:SSH整合存在的問題43一、Jsp

6、中訪問Session時,Session已經關閉43二、如果不配置事務,openSessionView出現(xiàn)異常44三、中文亂碼問題:44第十三課:SSH整合的jar包45一、Struts245二、Hibernate3.3.245三、Spring46第一課:面向抽象編程原來什么類都是寫死的,現(xiàn)在是先建立一個大的標準,然后再各個實體類來實現(xiàn)他們的功能,然后在調用的時候,使用這個標準調用,這樣,你們哪個來都可以被調用。實例:User實體類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的實現(xiàn)UserDaoImplpublic class User

8、DaoImpl implements UserDao Overridepublic void save(User u) System.out.println(user save.);User管理類public class UserService /這里需要什么的實現(xiàn),在new時,就new什么的實現(xiàn),在調用方法時,會調用具體的實現(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);/這里可以調用任務實現(xiàn)了UserDao接口的save方法了。第二課:Jdom的基本使用test.xml 8G 200 1580 10G 500 3000 實例類:public class Sample1 public static void main(String args) throws Exception SAXBuilder sb=new SAXBuilder();/創(chuàng)建一個SAXBuilder對象Document doc=sb.build(Sample1.class.ge

10、tClassLoader().getResourceAsStream(test.xml); /構造文檔對象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的內容 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功能因為Spring是使用xml配置文件來實現(xiàn)的,所以我們首先模擬一個xml的配置文件如下:beans.xml實現(xiàn)的功能:當類初始化時,一、 程序會根據(jù)此配置文件初始化文件所有的bean元素所代表的類,放入一個容器中(使用Map),然后在需要時,會根據(jù)ID值,取出這個對象;1、 代碼:public class ClassPathXmlApplicationContext implements BeanFactory private Map beans = new HashMap();public ClassPathXmlApp

13、licationContext() throws ExceptionSAXBuilder sb=new SAXBuilder();/創(chuàng)建一個SAXBuilder對象 Document doc=sb.build(ClassPathXmlApplicationContext.class.getClassLoader().getResourceAsStream(beans.xml); /構造文檔對象 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、 測試:BeanFactory factory = new ClassPathXmlApplicationContext();UserService service = new UserService();/UserService service = (UserService)factory.getBean(userService);UserDao userDao = (UserDao)factory.getBean(u);/此得只需要根據(jù)ID就可以取得Bean對象來使用service.setUserDao

16、(userDao);User u = new User();service.add(u);二、 當某一bean元素下存在property子元素時,則需要把這個子元素作為參數(shù)自動注入(使用setXXX方法)到這個bean對象中1、 代碼:public class ClassPathXmlApplicationContext implements BeanFactory private Map beans = new HashMap();public ClassPathXmlApplicationContext() throws ExceptionSAXBuilder sb=new SAXBuil

17、der();/創(chuàng)建一個SAXBuilder對象 Document doc=sb.build(ClassPathXmlApplicationContext.class.getClassLoader().getResourceAsStream(beans.xml); /構造文檔對象 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)是實現(xiàn)模擬spring自動裝配(注入)功能 /一開始列出此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值是已經在上面初始化好了的bean的ID了。 String bean = propertyElement.getAttributeValue(bean); /因此此處獲取指定ID的bean Object beanObject = beans.get(bean); /組成set方法名稱:set

20、 + 第一個字母大寫 + 其它的字母 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); /使用反映機制,執(zhí)行method方法,從而實現(xiàn)注入功能 m.invo

21、ke(o, beanObject); public Object getBean(String name)return beans.get(name);注意,以上有背景色的部分是實現(xiàn)自動裝配(注入)的代碼。2、 測試public void testAdd_3() throws Exception BeanFactory factory = new ClassPathXmlApplicationContext();UserService service = (UserService)factory.getBean(userService);/以下兩行代碼在實現(xiàn)注入功能后,將不再需要,因為程序在加

22、載時,已經幫我自動注入這個參數(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的運行環(huán)境一、 建立一個新的項目a) 建立新的目;b) 建立需要的bean類二、 建立spring的配置文件你可以在spring文件中復制代碼 !-或是下面的方式

23、 - 三、 引入spring的jar包可以建立一個User Library搭建spring環(huán)境基本的包:spring.jar和commons-logging.jar四、 測試代碼: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類實現(xiàn)了ApplicationContext接口,而ApplicationContext接口又實現(xiàn)了BeanFactory接口,這樣BeanFa

25、ctory是根上的接口。一般建議使用ApplicationContext接口,因為:1、BeanFactory:只是完成Bean工廠的基本功能,不能完成bean的生命周期2、ApplicationContext:除了完成bean工廠的基本功能外,還完成的其它的附加功能(比如:bean的生命周期),也就是功能更強大這樣上面的代碼就是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)配置及應用一、 什么是IOC、DIIOC: Inversion of Control控制反轉:原來類的一些成員屬性(例如UserService中的userDao成員屬性)是由當前類(UserService)自己控制,而是由容器(運行環(huán)境上下文、Spring)幫我們來控制。還是一種說法:原來我們自己控制是控制實現(xiàn),而現(xiàn)在Spring是利用接口來控制的。所以我們由原來控制實現(xiàn)轉為springg現(xiàn)在來控制接口(向上反轉

27、)作用:實例化具體的bean 動態(tài)裝配bean(本來是由我來控制的,現(xiàn)在我交給容器來控制。)DI:Dependency Injection依賴注入:一些成員屬性(例如UserService中的userDao成員屬性) 依賴Spring容器來注入好處:偶合性相對來降低了;另外,注入是使用配置文件來實現(xiàn),這樣修改來非常的方便.DI與IOC相對來說 是一樣的概念。二、 編輯xml文件時,沒有提示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、 構造方法(使用的非常少)3、 接口注入(可以忘記)(一) setter注入類型Setter Injection就是在bean中使用setXXX方法進行注入來在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配置文件如下: !-或是下面的方式 - (二) 構造方法Constructor Injection首先在bean類中需要有成員屬性作為參數(shù)的構造方法代碼如下: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);注意:背景較深的代碼為構造方法,帶有參數(shù)的構造方法spring配置文件如下: !- - !- 需要注意的: 使用表示,重新new一個bean然后注入進去, 使用表示,使用已經new好的bean,這是只是引用它。 - 使用和其子標簽或進行構造方法注入當構造方法注入時,構造方法中有多個參數(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ù)類型方式進行區(qū)分參數(shù):xml配置文件: 注意:這樣就是參數(shù)類型為int的注入7500000,而參數(shù)類型為java.lang.String的參數(shù)注入”42”,但這個方法不適合多個參數(shù)是相同的類型。2、利用索引進行區(qū)分參數(shù)xml配置文件 注意:index=0的注入到第一個參數(shù),index=1的注入到第二個參數(shù)。構造

33、方法的注入不方便,所以我們需要使用setter注入方式。四、 id、name注xml配置文件中標簽中的屬性名稱如下: 或 以上標簽中的屬性id與name作用是一樣,唯一的區(qū)別:id中不可以含有特殊字符,而name中可以有特殊字符五、 簡單屬性的注入當bean中存在簡單屬性時的注入方式: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屬性或是子標簽來注入六、 Bean的作用范圍scope在Spring配置文件中的標簽可以指定bean的作用范圍利用標簽中的scope屬性來

35、指定scope值:1、 singleton單例:每次取出的bean都是同一個bean。默認就是這個2、 prototype原型:每次取的bean時,都會重新創(chuàng)建一個新的bean 3、 request4、 session5、 globalsession實例: 注意:只有spring與web框架結合時才會使用request/session/globalsession,但也非常少用,因為其它框架已經有功能非常強大的scope了(例如:struts的scope)七、 集合注入很少用,不重要,參考程序 developme

36、a list element followed by a referencean entryjust some stringa refjust some string八、 自動裝配autowire含義:在bean注入時不需要我們來指定注入哪個具體的bean,而spring容器會根據(jù)我的使用autowire屬性來確定自動裝配功能。autowire值:1、 autodetect;2、 byName:根據(jù)bean中成員屬性的名稱來自動裝配3、 byType:根據(jù)bean中成員屬性的類型來自動裝配。4、 constaractor5、 default:會根據(jù)標簽中的defaul

37、t-autowire屬性來進行自動裝配的方式6、 no(默認就是這個,需要手動指定注入那個bean)(一) byName根據(jù)bean中成員屬性的名稱來自動裝配。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的配置文件 測試代碼:public void testAdd_4() throws Exception ApplicationContext factory = new ClassPathXmlApplicationContext(beans.xml);UserService service = (UserService)factory.getBean(userService);System.out.println(service.getUserDao();結果:daoId=1說明:因為在配置文件中配置了兩個UserDaoImpl(名稱分別:userDao、userDao2)和一個UserService類。而在userService的bean中并沒有進行注入配置。而是使用了autowire屬性指定了byN

溫馨提示

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

評論

0/150

提交評論