Spring IOC 和 DI
(1)什麽是IOC(Inversion Of Control 控制反轉)?
對象之間的依賴關系應該由容器來建立。
(2)什麽是DI(Dependency Injection 依賴註入)?
容器可以通過調用set方法或者構造器來建立對象之間的依賴關系。
註:IOC是目標,DI是手段。
(3)使用set方法來註入
配置set方法註入。property元素的name屬性用於指定set方法名(首字母大寫,前面添加set),ref屬性用於指定被註入的bean的id。
<bean id="a1" class="ioc.A">
<property name="b" ref="b1"/>
</bean>
(4)使用構造器來註入
<bean id="wt1" class="ioc.Waiter"/>
配置構造器註入。constructor-arg的index屬性用來指定參數的下標,ref屬性用來指定被註入的bean的id。
<bean id="rest1" class="ioc.Restaurant">
<constructor-arg index="0" ref="wt1"/>
</bean>
(5)自動裝配
a.自動裝配指的是,容器按照某種規則,自動建立對象之間的依賴關系。
即不用明確指定被註入的bean的id,容器底層仍然需要調用set方法或者構造器來完成依賴關系的建立。
b.容器默認情況下,是不會自動裝配的。
<bean id="eg1" class="autowire.Enginee"/>
autowire屬性用於指定自動裝配的方式,有三個值:
byName: 容器以屬性名作為bean的id來查找對應的bean,找到之後,調用set方法來完成註入。
註:如果找不到對應的bean,則不註入。
byType:容器以屬性類型作為bean的類型來查找對應的bean,找到之後,調用set方法來完成註入。
註:如果找不到對應的bean,則不註入。如果找到多個,則會出錯。
constructor:類似byType,只不過調用構造器來完成註入。
<bean id="car" class="autowire.Car" autowire="byType"/>
(6)註入基本類型的值
註入基本類型的值(包括String),使用value屬性。
註入基本類型的值(包括String),使用value屬性。
<bean id="vb1" class="value.ValueBean"> <property name="name" value="花花"/> <property name="age" value="20"/> </bean>
(7)註入集合類型的值
<bean id="vb1" class="value.ValueBean"> <property name="name" value="花花"/> <property name="age" value="20"/> <property name="interest"> <list> <value>釣魚</value> <value>做飯</value> <value>看電視</value> <value>看電視</value> </list> </property> <property name="city"> <set> <value>北京</value> <value>洛陽</value> <value>南京</value> </set> </property> <property name="score"> <map> <entry key="english" value="60"/> <entry key="math" value="1"/> </map> </property> <property name="db"> <props> <prop key="username">Tom</prop> <prop key="password">1234</prop> </props> </property> </bean>
(8)引用的方式註入集合類型的值
<util:list id="interestBean"> <value>抽煙</value> <value>喝酒</value> <value>燙頭</value> </util:list> <util:set id="cityBean"> <value>長沙</value> <value>嶽陽</value> <value>華容</value> </util:set> <util:map id="scoreBean"> <entry key="english" value="90"/> <entry key="math" value="80"/> </util:map> <util:properties id="dbBean"> <prop key="username">Sally</prop> <prop key="password">test</prop> </util:properties> <bean id="vb2" class="value.ValueBean"> <property name="interest" ref="interestBean"/> <property name="city" ref="cityBean"/> <property name="score" ref="scoreBean"/> <property name="db" ref="dbBean"/> </bean>
(9)讀取properties文件的內容
讀取.properties文件的內容。location屬性指定properties文件的位置,容器會讀取指定文件的內容,然後將這些內容添加到了Properties對象裏面。
<util:properties id="config" location="classpath:config.properties"/>
(10)Spring表達式
Spring IOC 和 DI