1. 簡介
????1.1 spring 是什么吠撮?? ??
????1.2 優(yōu)點:
? ? 1.3 結(jié)構(gòu)體系
2. 基于XML的IOC環(huán)境搭建與入門案例
? ? 2.1 安裝依賴
? ??2.2 創(chuàng)建bean對象的三種方式
????2.3 ApplicationContext(容器接口)的三個常用實現(xiàn)類
? ??2.4?BeanFactory 與 ApplicationContext?
? ? 2.5 bean作用域與生命周期
? ??2.6 依賴注入
1. 簡介:
? ? 1.1?spring 是什么?
????????Spring 是Apache公司開發(fā)的一個為了簡化企業(yè)級應(yīng)用的開源框架奴璃。以 IOC(控制反轉(zhuǎn))和 AOP(面向切面編程)為內(nèi)核,提供了展現(xiàn)層 Spring MVC 和持久層 Spring JDBC 以及業(yè)務(wù)層事務(wù)管理等眾多的企業(yè)級應(yīng)用技術(shù)潜秋,還能整合開源世界眾多著名的第三方技術(shù)框架和類庫吱七,逐漸成為使用最多的 Java EE 企業(yè)應(yīng)用開源框架。
? ? 1.2 優(yōu)點:
? ??????非侵入式(輕量級):基于Spring開發(fā)的應(yīng)用中的對象可以不依賴于Spring的API指郁。也就是說引入Spring框架并不會對原來的應(yīng)用產(chǎn)生影響
????????IOC解耦:一種設(shè)計思想,由IOC容器來控制對象的創(chuàng)建拷呆。雙方互不依賴闲坎,整個過程由IOC容器來管理
? ??????依賴注入:指依賴的對象不需要手動調(diào)用setXX方法去設(shè)置疫粥,而是通過配置賦值。
????????支持AOP編程:
? ??????容器:例如Struts2腰懂、hibernate梗逮、mybatis等框架都是可以被裝入Spring的容器中。這個容器包含并且管理應(yīng)用對象的生命周期绣溜。
? ??????組件化:Spring實現(xiàn)了使用簡單的組件配置組合成一個復(fù)雜的應(yīng)用慷彤。在 Spring 中可以使用XML和Java注解組合這些對象
? ? ????一站式:在IOC和AOP的基礎(chǔ)上可以整合各種企業(yè)應(yīng)用的開源框架和優(yōu)秀的第三方類庫(實際上Spring 自身也提供了表述層的SpringMVC和持久層的Spring JDBC)
? ? 1.3 結(jié)構(gòu)體系:
? ? ? ? 核心容器:????Beans????Core????Context,SpEL
2. 基于XML的IOC環(huán)境搭建與入門案例
????2.1 安裝依賴
? ? ? ? 安裝依賴怖喻,并查看依賴關(guān)系視圖底哗。
????2.2 創(chuàng)建bean對象的三種方式
? ? ? ? 新建bean.xml配置文件(JavaBean:用java語言編寫的可重用組件)
????2.3 ApplicationContext(容器接口)的三個常用實現(xiàn)類:
????????ClassPathXmlApplicationContext:它可以加載類路徑下的配置文件來創(chuàng)建IOC容器(配置文件必須在類路徑下,最常用)
????????FileSystemXmlApplicationContext:它可以加載磁盤任意路徑下的配置文件來創(chuàng)建IOC容器(必須有訪問權(quán)限)
????????AnnotationConfigApplicationContext:它是用于讀取注解創(chuàng)建容器的
? ? ? ? 在idea中右鍵選擇 show Diagram 與 show Implementations 查看繼承關(guān)系與實現(xiàn)類
????2.4?BeanFactory 與 ApplicationContext?
? ??????Spring 的作者Rod Johnson設(shè)計了兩個接口來創(chuàng)建容器锚沸。
????????BeanFactory:多例對象使用(可以理解成一個HashMap跋选,從上圖可以看出其位于最頂層,功能少相對少咒吐。)
????????它在構(gòu)建核心容器時野建,創(chuàng)建對象采取的策略是采用延遲加載的方式属划。也就是說恬叹,什么時候根據(jù)id獲取對象了,什么時候才真正的創(chuàng)建對象同眯。
????????ApplicationContext:單例對象適用(最常用)
????????它在構(gòu)建核心容器時绽昼,創(chuàng)建對象采取的策略是采用立即加載的方式。也就是說须蜗,只要一讀取完配置文件馬上就創(chuàng)建配置文件中配置的對象硅确。
? ? 2.5 bean作用域與生命周期:
? ? ? ? scope(作用域):
????????????singleton:單例的(默認(rèn)值)
????????????prototype:多例的
? ? ? ? ? ? request:作用于web應(yīng)用的請求范圍(一次request一個實例)
? ? ? ? ? ? session:作用于web應(yīng)用的會話范圍(一次http session一個實例)
? ? ? ? ? ? global-session:作用于集群環(huán)境的會話范圍(全局會話范圍),當(dāng)不是集群環(huán)境時明肮,它就是session
????????單例對象的生命周期:
????????????創(chuàng)建:當(dāng)容器創(chuàng)建時對象創(chuàng)建
????????????銷毀:容器銷毀菱农,對象銷毀
????????????總結(jié):單例對象的生命周期和容器相同
????????多例對象的生命周期:
????????????創(chuàng)建:當(dāng)我們使用這個對象時spring框架為我們創(chuàng)建
????????????銷毀:當(dāng)對象長時間不用,且沒有別的對象引用時柿估,由Java的垃圾回收器回收
????2.6 依賴注入
????????第一種:使用構(gòu)造函數(shù)注入(有默認(rèn)的構(gòu)造函數(shù)) <constructor-arg></constructor-arg>
????????第二種:使用set方法注入(存在set方法) <property></property>??
????????第三種:使用注解注入?@Autowired +?@Qualifier("xxx") 或??@Resource(name = "XXX")