




已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第二篇 spring框架一、Spring 概述l 使用 Spring 可以使簡(jiǎn)單的 JavaBean 實(shí)現(xiàn)以前只有 EJB 才能實(shí)現(xiàn)的功能.l Spring 是一個(gè) IoC(控制反轉(zhuǎn))或稱DI(依賴注入) 和 AOP 容器框架.l 輕量級(jí). 整個(gè)大小可以打成一個(gè) 2.5 MB 的 jar 包, 而且 Spring 的處理開支也很小. 更重要的是 Spring 是非侵入性的: 基于 Spring 開發(fā)的應(yīng)用中的對(duì)象可以不依賴于 Spring 的 APIl 依賴注入(DI - dependency injection)l 面向切面編程(AOP - aspect oriented programming)l 容器: Spring 是一個(gè)容器, 因?yàn)樗⑶夜芾響?yīng)用對(duì)象的生命周期l 框架: Spring 實(shí)現(xiàn)了使用簡(jiǎn)單的組件配置組合成一個(gè)復(fù)雜的應(yīng)用. 在 Spring 中可以使用 XML 文件組合這些對(duì)象2、 Spring 模塊1. IOC(Inversion of Control)控制反轉(zhuǎn)(loc):控制權(quán)的轉(zhuǎn)移。Spring中IOC的基本概念是:基于OO設(shè)計(jì)原則的The Hollywood Principle:Dont call us, well call you(別找我,我會(huì)來找你的)。程序中各個(gè)組件之間的關(guān)系,不由程序代碼直接操控,而由容器控制??刂茩?quán)由應(yīng)用代碼中轉(zhuǎn)到了外部容器,即所謂的反轉(zhuǎn)。也就是說對(duì)象的控制權(quán)轉(zhuǎn)交給spring容器。三、搭建 Spring 開發(fā)環(huán)境把以下 jar 包加入到工程的 classpath 下:distspring.jar: 該文件中包含了所有標(biāo)準(zhǔn)的 spring 模塊libjakarta-commonscommons-logging.jar:spring 使用該庫(kù)輸出日志信息Spring 的配置文件: 一個(gè)典型的 Spring 項(xiàng)目需要?jiǎng)?chuàng)建一個(gè)或多個(gè) Bean 配置文件, 這些配置文件用于在 Spring IOC 容器里配置 Bean. Bean 的配置文件可以放在 classpath 下, 也可以放在其它目錄下.可以復(fù)制 samplesjpetstorewarWEB-INFapplicationContext.xml四、建立 Spring 項(xiàng)目HelloWorld.javabeans.xmlTest.java5、 bean 配置一、IOC控制反轉(zhuǎn)public class PersonServiceBean private PersonDao personDao = new PersonDaoBean(); public void save(Person person) personDao.save(person); PersonDaoBean 是在應(yīng)用程序內(nèi)部創(chuàng)建及維護(hù)的。所謂控制反轉(zhuǎn)就是應(yīng)用本身不負(fù)責(zé)依賴對(duì)象的創(chuàng)建及維護(hù),依賴對(duì)象的創(chuàng)建及維護(hù)是由外部容器負(fù)責(zé)的。這樣控制權(quán)就由應(yīng)用轉(zhuǎn)移到了外部容器,控制權(quán)的轉(zhuǎn)移就是所謂反轉(zhuǎn)。1、 IOC控制反轉(zhuǎn)舉例情況1:不使用Ioc類A:package ;public class A public String say() return hello world; 類B:A a=new A();out.print(a.say();情況2:使用IOC之一類A:package ;public class A public String say() return hello world; Beans.xml文件配置 類B:import=org.springframework.context.ApplicationContext“;import=org.springframework.context.support.ClassPathXmlApplicationContext ApplicationContext ctx = new ClassPathXmlApplicationContext(beans.xml);A a= (A)ctx.getBean(mybean);out.print(a.say();輸出結(jié)果: hello world情況3:使用IOC之二(set 注入)類Apackage ;public class A private String message; public void setMessage(String message) this.message = message; public String say() return message; Beans.xml文件配置 類Bimport=org.springframework.context.ApplicationContext“;import=org.springframework.context.support.ClassPathXmlApplicationContext ApplicationContext ctx = new ClassPathXmlApplicationContext(beans.xml);A a= (A)ctx.getBean(mybean);out.print(a.say();輸出結(jié)果:中國(guó)你好情況4:使用IOC之三(構(gòu)造注入)類A:package ;public class A private String message; public A(String mess) this.message=mess; public String say() return message; Beans.xml文件配置 類BApplicationContext ctx = new ClassPathXmlApplicationContext(beans.xml);A a= (A)ctx.getBean(mybean);out.print(a.say();輸出結(jié)果:世界你好2、 依賴注入(Dependency Injection)DI 當(dāng)我們把依賴對(duì)象交給外部容器負(fù)責(zé)創(chuàng)建,那么PersonServiceBean 類可以改成如下:public class PersonServiceBean private PersonDao personDao ; /通過構(gòu)造器參數(shù),讓容器把創(chuàng)建好的依賴對(duì)象注入進(jìn)PersonServiceBean,當(dāng)然也可以使用setter方法進(jìn)行注入。 public PersonServiceBean(PersonDao personDao) this.personDao=personDao; public void save(Person person) personDao.save(person); 所謂依賴注入就是指:在運(yùn)行期,由外部容器動(dòng)態(tài)地將依賴對(duì)象注入到組件中。3、spring的配置文件模版:. 該配置模版可以從spring的參考手冊(cè)或spring的例子中得到。配置文件的取名可以任意,文件可以存放在任何目錄下,但考慮到通用性,一般放在類路徑下。4、編寫spring配置文件時(shí),不能出現(xiàn)幫助信息由于spring的schema文件位于網(wǎng)絡(luò)上,如果機(jī)器不能連接到網(wǎng)絡(luò),那么在編寫配置信息時(shí)候就無法出現(xiàn)提示信息,解決方法有兩種:1。讓機(jī)器上網(wǎng),eclipse會(huì)自動(dòng)從網(wǎng)絡(luò)上下載schema文件并緩存在硬盤上。2。手動(dòng)添加schema文件,方法如下:windwos-preferences-myeclipse-files and editors-xml-xmlcatalog點(diǎn)add,在出現(xiàn)的窗口中的Key Type中選擇URI,在location中選File system,然后在spring解壓目錄的dist/resources目錄中選擇spring-beans-2.5.xsd,回到設(shè)置窗口的時(shí)候不要急著關(guān)閉窗口,應(yīng)把窗口中的Key Type改為Schema location,Key改為/schema/beans/spring-beans-2.5.xsd5、三種實(shí)例化bean(就是一個(gè)java類,在src下配置文件中實(shí)例化)的方式1、使用類構(gòu)造器實(shí)例化2、使用靜態(tài)工廠方法實(shí)例化public class OrderFactory public static OrderServiceBean createOrder()return new OrderServiceBean();3、使用實(shí)例工廠方法實(shí)例化:public class OrderFactory public OrderServiceBean createOrder()return new OrderServiceBean();5.1、使用類構(gòu)造器實(shí)例化5.1.1接口Package .service;public interface PersonService public void save();5.1.2實(shí)現(xiàn)類package ;public class PersonServiceBean implements PersonService public void save()System.out.println(我是save()方法);5.1.3使用類構(gòu)造器在配置文件實(shí)例化Bean 5.2、使用靜態(tài)工廠方法實(shí)例化5.2.1接口Package ;public interface PersonService public void save();5.2.2 實(shí)現(xiàn)類package ;public class PersonServiceBean implements PersonService public void save()System.out.println(我是save()方法);5.2.3 靜態(tài)工廠類package ;public class PersonServiceBeanFactory public static PersonServiceBean createPersonServiceBean()return new PersonServiceBean();5.2.4 用靜態(tài)工廠方法在配置文件實(shí)例化Bean5.3 使用實(shí)例工廠方法實(shí)例化5.3.1 接口Package ;public interface PersonService public void save();5.3.2 實(shí)現(xiàn)類package ;public class PersonServiceBean implements PersonService public void save()System.out.println(我是save()方法);5.3.3 工廠類package ;public class PersonServiceBeanFactory public PersonServiceBean createPersonServiceBean()return new PersonServiceBean();5.3.4使用實(shí)例工廠方在配置文件實(shí)例化Bean 6、 Bean的作用域singleton 在每個(gè)Spring IoC容器中一個(gè)bean定義只有一個(gè)對(duì)象實(shí)例。默認(rèn)情況下會(huì)在容器啟動(dòng)時(shí)初始化bean,但我們可以指定Bean節(jié)點(diǎn)的lazy-init=“true”來延遲初始化bean,這時(shí)候,只有第一次獲取bean會(huì)才初始化bean。如: 如果想對(duì)所有bean都應(yīng)用延遲初始化,可以在根節(jié)點(diǎn)beans設(shè)置default-lazy-init=“true“,如下:.prototype 每次從容器獲取bean都是新的對(duì)象。 .request .session .global session6.1 singleton 作用域 當(dāng)一個(gè)bean的作用域設(shè)置為singleton,那么Spring IOC容器中只會(huì)存在一個(gè)共享的bean實(shí)例,并且所有對(duì)bean的請(qǐng)求,只要id與該bean定義相匹配,則只會(huì)返回bean的同一實(shí)例。換言之,當(dāng)把一個(gè)bean定義設(shè)置為singleton作用域時(shí),Spring IOC容器只會(huì)創(chuàng)建該bean定義的唯一實(shí)例。在beans.xml文件中配置或者 ApplicationContext ctx = new ClassPathXmlApplicationContext(beans.xml);A a1 = (A)ctx.getBean(a);A a2 = (A)ctx.getBean(a);out.println(a1=a2);/相等6.2 prototype 作用域 prototype作用域部署的bean,每一次請(qǐng)求(將其注入到另一個(gè)bean中,或者以程序的方式調(diào)用容器的getBean()方法)都會(huì)產(chǎn)生一個(gè)新的bean實(shí)例,相當(dāng)于一個(gè)new的操作,對(duì)于prototype作用域的bean,有一點(diǎn)非常重要,那就是Spring不能對(duì)一個(gè)prototype bean的整個(gè)生命周期負(fù)責(zé),容器在初始化、配置、裝飾或者是裝配完一個(gè)prototype實(shí)例后,將它交給客戶端,隨后就對(duì)該prototype實(shí)例不聞不問了。清除prototype作用域的對(duì)象并釋放任何prototype bean所持有的昂貴資源,都是客戶端代碼的職責(zé)?;蛘?ApplicationContext ctx = new ClassPathXmlApplicationContext(beans.xml);A a1 = (A)ctx.getBean(a);A a2 = (A)ctx.getBean(a);out.println(a1=a2); /不相等6.3 request、session、global session作用域request、session、global session使用的時(shí)候,首先要在初始化web的web.xml中做如下配置: 如果你使用的是Servlet 2.4及以上的web容器,那么你僅需要在web應(yīng)用的XML聲明文件web.xml中增加下述ContextListener即可: org.springframework.web.context.request.RequestContextListener 如果是Servlet2.4以前的web容器,那么你要使用一個(gè)javax.servlet.Filter的實(shí)現(xiàn): requestContextFilter org.springframework.web.filter.RequestContextFilter requestContextFilter /* 7、指定Bean的初始化方法和銷毀方法指定Bean的初始化方法和銷毀方法例子public class PersonServiceBean public void init()System.out.println(初始化);public PersonServiceBean()System.out.println(我被實(shí)例化了);public void save()System.out.println(我是save()方法);public void destory()System.out.println(關(guān)閉打開的資源); AbstractApplicationContext ctx = new ClassPathXmlApplicationContext(beans.xml);ctx.close();8、 注入依賴對(duì)象8.1基本類型對(duì)象注入:/構(gòu)造器注入,index表示第幾個(gè)參數(shù) /屬性setter方法注入8.2 注入其他bean:8.1基本類型對(duì)象注入1、基本數(shù)據(jù)類型的set注入public class User private int userid;private String username;private String password;為此類添加getter和setter配置文件:測(cè)試類:ApplicationContext ctx = new ClassPathXmlApplicationContext(beans.xml);User user = (User)ctx.getBean(“User);2、基本數(shù)據(jù)類型的構(gòu)造器注入(構(gòu)造方法)為User添加構(gòu)造方法public class User private int userid;private String username;private String password; User(int userid, String username, String password) this.userid = userid;this.username = username;this.password = password;配置文件多構(gòu)造器時(shí)應(yīng)該指定參數(shù)順序和類型3、特殊類型數(shù)據(jù)的注入public class Student private int id;private String name;private String favor;private Set set;private List list;private Map map;private User user;添加setter 和getter數(shù)組的注入上網(wǎng)足球Set的注入setvalue1setvalue2List的注入listvalue1listvalue2Map的注入測(cè)試public static void main(String args) ApplicationContext context = new ClassPathXmlApplicationContext(bean.xml);Student std = (Student) context.getBean(student);System.out.println(std.getId();System.out.println(std.getName();System.out.println(std.getFavor().toString();System.out.println(std.getList();System.out.println(std.getSet();System.out.println(std.getMap();System.out.println(std.getUser();8.2 對(duì)象類型依賴注入8.2.1 接口Package ;public interface PersonDao public void add();8.2.2 實(shí)現(xiàn)接口類Package ;public class PersonDaoBean implements PersonDao public void add()System.out.println(執(zhí)行PersonDaoBean中的add()方法);8.2.3 要注入PersonDao對(duì)象的類package ;public class PersonServiceBean private PersonDao personDao;public PersonDao getPersonDao() return personDao;public void setPersonDao(PersonDao personDao) this.personDao = personDao;public void save()personDao.add();8.2.4 對(duì)象類型依賴注入配置 /name 屬性名,即PersonServiceBean類的對(duì)象變量personDao/ref 是PersonDaoBean類實(shí)例化的id名8.2.5 測(cè)試網(wǎng)頁(yè)中導(dǎo)入org.springframework.context.ApplicationContext;org.springframework.context.support.ClassPathXmlApplicationContext;ApplicationContext ctx = new ClassPathXmlApplicationContext(beans.xml);PersonServiceBean personService = (PersonServiceBean)ctx.getBean(personService);personService.save();8.3依賴注入的分類使用構(gòu)造器注入使用屬性setter方法注入使用Field注入(用于注解方式)注入依賴對(duì)象可以采用手工裝配自動(dòng)裝配自動(dòng)掃描方式,在實(shí)際應(yīng)用中建議使用手工裝配,因?yàn)樽詣?dòng)裝配會(huì)產(chǎn)生未知情況,開發(fā)人員無法預(yù)見最終的裝配結(jié)果。1.手工裝配依賴對(duì)象2.自動(dòng)裝配依賴對(duì)象3.自動(dòng)掃描方式依賴注入的分類-手工裝配手工裝配依賴對(duì)象,在這種方式中又有兩種編程方式1. 在xml配置文件中,通過在bean節(jié)點(diǎn)下配置,如/構(gòu)造器注入/屬性setter方法注入2. 在java代碼中使用Autowired或Resource注解方式進(jìn)行裝配。但我們需要在xml配置文件中配置以下信息: 這個(gè)配置隱式注冊(cè)了多個(gè)對(duì)注釋進(jìn)行解析處理的處理器:AutowiredAnnotationBeanPostProcessor,CommonAnnotationBeanPostProcessor,PersistenceAnnotationBeanPostProcessor,RequiredAnnotationBeanPostProcessor 注: Resource注解在spring安裝目錄的libj2eecommon-annotations.jar在java代碼中使用Autowired或Resource注解方式進(jìn)行裝配,這兩個(gè)注解的區(qū)別是:Autowired 默認(rèn)按類型裝配,Resource默認(rèn)按名稱裝配,當(dāng)找不到與名稱匹配的bean才會(huì)按類型裝配。 Autowired private PersonDao personDao;/用于字段上 Autowired public void setOrderDao(OrderDao orderDao) /用于屬性的setter方法上 this.orderDao = orderDao; Autowired注解是按類型裝配依賴對(duì)象,默認(rèn)情況下它要求依賴對(duì)象必須存在,如果允許null值,可以設(shè)置它required屬性為false。如果我們想使用按名稱裝配,可以結(jié)合Qualifier注解一起使用。如下: Autowired Qualifier(personDaoBean) private PersonDao personDao;Resource注解和Autowired一樣,也可以標(biāo)注
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 護(hù)理服務(wù)方法
- 網(wǎng)絡(luò)文學(xué)作品影視改編權(quán)合作與分成協(xié)議
- 虛擬游戲裝備交易平臺(tái)分割及收益協(xié)議
- 花園圍欄翻新與維護(hù)責(zé)任協(xié)議
- 譫妄個(gè)案護(hù)理
- 夫妻忠誠(chéng)保證及共同債務(wù)處理協(xié)議
- 外籍技術(shù)顧問駐場(chǎng)咨詢與技術(shù)服務(wù)協(xié)議
- 生物醫(yī)藥數(shù)據(jù)出境安全審查及合規(guī)操作協(xié)議
- 知識(shí)產(chǎn)權(quán)代理機(jī)構(gòu)股權(quán)合作與知識(shí)產(chǎn)權(quán)戰(zhàn)略布局協(xié)議
- 智慧社區(qū)智能安防系統(tǒng)服務(wù)與物業(yè)管理平臺(tái)合作協(xié)議
- 河北經(jīng)貿(mào)大學(xué)經(jīng)濟(jì)管理學(xué)院《大學(xué)英語(yǔ)》課件-Unit3The art of communication
- 國(guó)際經(jīng)濟(jì)學(xué)羅伯特凱伯答案
- 新部編版四年級(jí)下冊(cè)道德與法治全冊(cè)優(yōu)秀教學(xué)課件(1-12課)
- 商業(yè)推理測(cè)評(píng)題庫(kù)40題
- 半導(dǎo)體用濕式化學(xué)品的應(yīng)用
- (PEP)人教版五年級(jí)下冊(cè)英語(yǔ)《Unit 5 Part B Let's talk》教學(xué)設(shè)計(jì)
- 基于PLC控制的物料分揀系統(tǒng)設(shè)計(jì)
- 上期開特下期出特公式
- 案件進(jìn)度管理規(guī)定表--執(zhí)行
- 前部分拼音四聲調(diào)
- 標(biāo)準(zhǔn)工程量清單細(xì)目編號(hào)公路工程
評(píng)論
0/150
提交評(píng)論