實現說明
BeanFactory與ApplicationContext的區別
BeanFactory是整個Spring框架中IOC容器的頂層接口,主要定義容器的基本規範,ApplicationContext是BeanFactory的子接口,具備BeanFactory的所有功能。
一般稱BeanFactory爲IOC的基礎容器,ApplicationContext是容器的高級接口,有更多功能,比如國際化、資源訪問等
純XML模式
bean實例化的三種方式
方式一:無參構造器(推薦)
<bean id="connectionUtils" class="com.test.transfer.utils.ConnectionUtils"></bean>
方式二:靜態方法
<bean id="connectionUtilsStatic" class="com.test.transfer.utils.createConnectionFactory" factory-method="getInstanceStatic"/>
方式三:實例化方法
<bean id="createConnectionFactory" class="com.test.transfer.utils.createConnectionFactory"/>
<bean id="connectionUtilsInstance" factory-bean="createConnectionFactory" factory-method="getInstance"/>
bean的作用範圍和生命週期
scope:定義bean的作用範圍(默認爲singleton)
Singleton:單例,IOC容器中只有一個對象
單例模式對象的生命週期與容器相同
prototype:原型,每次請求都是新對象
多例模式Spring只負責創建,不負責銷燬
request
session
application
websocket
bean的屬性
id
class
name
factory-bean
factory-method
scope
init-method:初始化方法,必須是無參方法
destroy-method:對象銷燬前執行,只有在scope爲sington的時候有效
DI的依賴注入方式
set注入
使用property標籤,注入bean使用ref,注入普通值用value
構造器注入
使用constructor-arg標籤,屬性主要使用index/name,ref,value
複雜類型
array:array子標籤,value/ref
map:map子標籤,entry->key/value
set:set子標籤
Properties:props子標籤,prop->key
xml與註解相結合模式
純xml很少使用
引入註解不需要額外的jar
IOC容器的啓動仍然從加載xml開始
使用規則:
第三方使用xml,自定義使用註解
@Autowired
@Qualifier(Autowired無法區分類型的時候結合Autowired,用於區分具體是注入那個類型)
@Resource(jdk11已經移除,需要引入javax.annotaton-api包使用)
純註解模式
@Configuration:標記爲配置類
@CommonentScan:替代context:component-scan
@PropertySource:引入外部資源文件
@Import引入其他配置類
@Value:變量賦值
@Bean:自定對象注入到IOC容器