IOC容器
a.什麼是IOC
控制反轉(Inversion of Control),把物件的建立和物件之間的呼叫過程,交給Spring進行管理
b.目的
為了使耦合度降低
1.IOC底層原理
xml解析,工廠模式,反射
第一步 xml配置檔案,配置建立的物件
<bean id="dao" class="class.fqqa.UserDao"></bean>
第二步 有service類和dao類,建立工廠類
_1.xml解析:String classValue = class屬性值;
_2.通過反射建立物件
class clazz = class.forName(classValue);
(UserDao)clazz.newInstance;
2.IOC介面(BeanFactory)
_1.IOC思想基於IOC容器完成,IOC容器底層就是物件工廠
_2.Spring提供IOC容器實現兩種方式:(兩個介面)
__1.BeanFactory:IOC容器基本實現,是Spring內部的使用介面,不提供開發人員使用
*載入配置檔案的時候不會去建立物件,在獲取(使用)物件時才去建立物件
__2.ApplicationContext:BeanFactory介面的子介面,提供更多的功能,由開發人員使用
*載入配置檔案的時候就會吧配置檔案物件進行建立
__3.ApplicationContext介面的實現類
FileSystemXmlApplicationContext
classPathXmlApplicationContext
3.IOC操作Bean管理
_1.什麼是bean管理
bean管理指的是兩個操作:Spring建立物件,Spring注入屬性
_2.bean管理的基本操作
__1.建立物件:<bean id="user" class="com.fqqa.spring5.User"></bean> 建立物件的時候預設是執行無引數構造方法完成物件建立
id屬性:唯一標識
class屬性:類全路徑
name屬性(用的不多)
__2.注入屬性:
___1.DI:依賴注入,就是注入屬性
使用set方法注入,使用有引數構造注入
使用有引數構造進行注入
___2.名稱空間注入 可以簡化xml配置(瞭解即可)
__3.xml注入其他屬性
注入null值
<property name="address">
<null/>
</property>
注入特殊符號
<property name="address">
<value><![CDATA[<<南京>>]]></value>
</property>
__4.注入外部bean
注入內部bean
<bean id="emp" class="com.fqqa.spring5.bean.Emp">
<!--設定兩個普通的屬性-->
<property name="ename" value="lucy"></property>
<property name="gender" value="女"></property>
<!--設定物件型別屬性-->
<property name="dept">
<bean id="dept" class="com.fqqa.spring5.bean.Dept">
<property name="dname" value="財務部"></property>
</bean>
</property>
</bean>
級聯賦值
注入集合屬性
<property name="maps">
<util:map>
<entry key="JAVA" value="java"></entry>
<entry key="PYTHON" value="python"></entry>
</util:map></property>
在集合裡面設定物件型別值
把集合注入部分提取出來
Spring有兩種Bean :普通bean和 工廠bean(FactoryBean)
普通bean:在配置檔案中定義bean型別就是返回型別
工廠bean:在配置檔案中定義bean型別可以和返回型別不一樣
Bean的作用域
在Spring裡面建立Bean例項是單例項還是多例項(是否是同一個物件)
在Spring裡面預設是單例項物件
bean標籤中屬性scope設定例項(singleton表示單例項,prototype表示是多例項,request ,session)
bean的生命週期:
1.通過構造器建立bean例項(無引數構造器)
postProcessBeforeInitialization()
2.為bean的屬性設定值和對其他的bean引用(呼叫set方法)
(2.5)把bean例項傳遞bean後置處理器的方法
postProcessAfterInitialization()
3.呼叫bean的初始化的方法(需要進行配置)
(3.5)把bean例項傳遞bean後置處理器的方法
4.bean可以使用了(物件找到了)
5.當容器關閉時候,呼叫bean的銷燬的方法(需要進行配置銷燬的方法)
bean的後置處理器,bean的生命週期就有7步(如上)
xml自動裝配:根據指定裝配規則(屬性名稱(byName),屬性型別(byType)),spring自動將匹配的屬性值進行注入