1. 程式人生 > 實用技巧 >IOC容器

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自動將匹配的屬性值進行注入