Spring為簡化企業(yè)級應(yīng)用開發(fā)而生
Spring是一個IOC(DI)(反轉(zhuǎn)控制)和AOP(面向切面編程)框架
----輕量級:Spring是非侵入性的--基于Sping開發(fā)的應(yīng)用中的對象可以不依賴Spring的API
----容器:Spring是一個容器,因?yàn)樗⑶夜芾響?yīng)用對象的聲明周期
2宵距、添加spring依賴的jar包和spring相關(guān)的包
IOC(Inversion of Control):其思想是反轉(zhuǎn)資源獲取的方向抬吟。傳統(tǒng)的資源查找方式要求組件向容器發(fā)起強(qiáng)求查找資源田盈。作為回應(yīng),容器適時地返回資源。而應(yīng)用了IOC后,則是容器主動地將資源推送給他所管理的組件酒觅,組件所要做的僅是選擇一種合適的方式來接受資源,這種方式也被稱為查找的被動方式微峰。
DI(Dependency Injection)-IOC的另一種表述方式舷丹,即組件以一些預(yù)定義好的方式(例如setter方式)接受來自如容器的資源注入。
在SpringIOC容器讀取Bean配置創(chuàng)建Bean實(shí)例之前蜓肆,必須對他進(jìn)行實(shí)例化颜凯,只有在容器實(shí)例化后,才可以從IOC容器里獲取Bean實(shí)例并使用
Spring提供了兩種類型的IOC容器實(shí)現(xiàn):
---BeanFactory:IOC容器的基本實(shí)現(xiàn)
---ApplicationContext:提供了更多的高級特性仗扬,是BeanFactory的子接口
---BeanFactory是Spring框架的基礎(chǔ)設(shè)施症概,面向Spring本身;
ApplicationContext面向使用Spring框架的開發(fā)者厉颤。幾乎所有的應(yīng)用場合都直接使用ApplicationContext而非底層的BeanFactory
---無論何種方式穴豫,配置文件是相同的凡简。
ApplicationContext的主要實(shí)現(xiàn)類:
---ClassPathXmlApplicationContext:從類路徑下加載配置文件
---FileSystemXmlApplicationContext:從文件系統(tǒng)中加載配置文件
ConfigurableApplicationContext擴(kuò)展于ApplicationContext逼友,新增兩個主要方法: refresh()和close(),讓ApplicationContext具有啟動秤涩、刷新和關(guān)閉上下文的功能
ApplicationContext在初始化上下文時就實(shí)例化所有單例的Bean
WebApplicationContext是專門為WEB應(yīng)用而準(zhǔn)備的帜乞,它允許從相對于WEB根目錄的路徑中完成初始化工作
Spring支持3種依賴注入的方式
---屬性注入(最常用)
---構(gòu)造器注入
---工廠方式注入(幾乎不用)
屬性注入即通過setter方法注入bean的屬性值或依賴的對象
屬性注入使用<property>元素,使用name屬性指定Bean的屬性名稱筐眷,value屬性或<value>子節(jié)點(diǎn)指定屬性值
通過構(gòu)造方法注入Bean的屬性值或依賴的對象黎烈,它保證了Bean實(shí)例在實(shí)例化后就可以使用
構(gòu)造器注入在<constructor-arg>元素里聲明屬性,其中沒有name屬性
使用構(gòu)造器注入屬性可以指定參數(shù)的位置和參數(shù)的類型,以區(qū)分重載的構(gòu)造器
使用props和prop子節(jié)點(diǎn)來為Properties屬性賦值
配置單例bean的集合照棋,以供多個bean進(jìn)行引用资溃,需要導(dǎo)入util命名空間
通過p命名空間為bean的屬性賦值,需要先導(dǎo)入p命名空間
bean配置的繼承:使用bean的parent屬性指定繼承哪個bean的配置
抽象bean:bean的abstract屬性為true的bean烈炭,這樣的bean不能被IOC容器實(shí)例化溶锭,只用來被繼承配置
依賴前置bean:depends-on(與指定屬性差不多);
使用bean的scope屬性來配置bean的作用域
singleton:默認(rèn)值符隙,容器初始化時創(chuàng)建bean實(shí)例趴捅,在整個容器的生命周期內(nèi)只創(chuàng)建這一個bean,單例
prototype:原型的霹疫,容器初始化時不創(chuàng)建bean的實(shí)例拱绑,而在每次請求時都創(chuàng)建一個新的bean ,并 返回
使用外部屬性文件:
通過<context:property-placeholder location="classpath(類路徑下):db.properties">
spring允許在bean中使用$(proName)丽蝎,以實(shí)現(xiàn)引用