Spring為簡化企業級應用開發而生
Spring是一個IOC(DI)(反轉控制)和AOP(面向切面編程)框架
----輕量級:Spring是非侵入性的--基于Sping開發的應用中的對象可以不依賴Spring的API
----容器:Spring是一個容器,因為它包含并且管理應用對象的聲明周期
IOC(Inversion of Control):其思想是反轉資源獲取的方向。傳統的資源查找方式要求組件向容器發起強求查找資源。作為回應,容器適時地返回資源。而應用了IOC后,則是容器主動地將資源推送給他所管理的組件,組件所要做的僅是選擇一種合適的方式來接受資源,這種方式也被稱為查找的被動方式。
DI(Dependency Injection)-IOC的另一種表述方式,即組件以一些預定義好的方式(例如setter方式)接受來自如容器的資源注入。
在SpringIOC容器讀取Bean配置創建Bean實例之前,必須對他進行實例化,只有在容器實例化后,才可以從IOC容器里獲取Bean實例并使用
Spring提供了兩種類型的IOC容器實現:
---BeanFactory:IOC容器的基本實現
---ApplicationContext:提供了更多的高級特性,是BeanFactory的子接口
---BeanFactory是Spring框架的基礎設施,面向Spring本身;
ApplicationContext面向使用Spring框架的開發者。幾乎所有的應用場合都直接使用ApplicationContext而非底層的BeanFactory
---無論何種方式,配置文件是相同的。
ApplicationContext的主要實現類:
---ClassPathXmlApplicationContext:從類路徑下加載配置文件
---FileSystemXmlApplicationContext:從文件系統中加載配置文件
ConfigurableApplicationContext擴展于ApplicationContext,新增兩個主要方法: refresh()和close(),讓ApplicationContext具有啟動、刷新和關閉上下文的功能
ApplicationContext在初始化上下文時就實例化所有單例的Bean
WebApplicationContext是專門為WEB應用而準備的,它允許從相對于WEB根目錄的路徑中完成初始化工作
Spring支持3種依賴注入的方式
---屬性注入(最常用)
---構造器注入
---工廠方式注入(幾乎不用)
屬性注入即通過setter方法注入bean的屬性值或依賴的對象
屬性注入使用<property>元素,使用name屬性指定Bean的屬性名稱,value屬性或<value>子節點指定屬性值
通過構造方法注入Bean的屬性值或依賴的對象,它保證了Bean實例在實例化后就可以使用
構造器注入在<constructor-arg>元素里聲明屬性,其中沒有name屬性
使用構造器注入屬性可以指定參數的位置和參數的類型,以區分重載的構造器
使用props和prop子節點來為Properties屬性賦值
配置單例bean的集合,以供多個bean進行引用,需要導入util命名空間
通過p命名空間為bean的屬性賦值,需要先導入p命名空間
bean配置的繼承:使用bean的parent屬性指定繼承哪個bean的配置
抽象bean:bean的abstract屬性為true的bean,這樣的bean不能被IOC容器實例化,只用來被繼承配置
依賴前置bean:depends-on(與指定屬性差不多);
使用bean的scope屬性來配置bean的作用域
singleton:默認值,容器初始化時創建bean實例,在整個容器的生命周期內只創建這一個bean,單例
prototype:原型的,容器初始化時不創建bean的實例,而在每次請求時都創建一個新的bean ,并 返回
使用外部屬性文件:
通過<context:property-placeholder location="classpath(類路徑下):db.properties">
spring允許在bean中使用$(proName),以實現引用