SpringIOC容器建立物件及依賴注入的幾種方式
SpringIOC容器:是spring的核心內容
作用:建立物件,處理物件的依賴關係
IOC容器建立物件
幾種方式:
1、呼叫無參構造
<bean id="user" class="edu.cloud.spring.entity.User"></bean>
2、呼叫帶參構造
<bean id="user2" class="edu.cloud.spring.entity.User">
<constructor-arg value="tom" index="1"></constructor-arg>
<constructor-arg value="101" index="0"></constructor-arg>
</bean>
3、工廠建立物件
工廠類:非靜態方法建立物件
<!-- 工廠類的例項 -->
<bean id="UserFactory" class="edu.cloud.spring.entity.UserFactory"></bean>
<!-- 使用例項方法建立物件 -->
<bean id="user4" factory-bean="UserFactory" factory-method="getInstance"></bean>
靜態方法建立物件
<!-- (靜態)方法建立物件 -->
<!-- class:指定工廠類型別 -->
<bean id="user5" class="edu.cloud.spring.entity.UserFactory" factory-method="getStaticInstance"></bean>
物件依賴關係
DI,依賴注入
1、通過構造
<bean id="user2" class="edu.cloud.spring.entity.User">
<constructor-arg value="tom" index="1"></constructor-arg>
<constructor-arg value="101" index="0"></constructor-arg>
</bean>
2、通過set方法對屬性注入【常用】
<bean id="user4" class="edu.cloud.spring.entity.User">
<property name="id" value="110"></property>
<property name="name" value="hhh"></property>
</bean>
<!-- 不用value了,用rel把這個物件引用進來 -->
<!-- 三層架構 依賴注入 -->
<!-- Action -->
<bean id="userAction" class="edu.cloud.second.UserAction">
<!-- property中的name指的是命名setter方法中的attribute部分:eg. setUserService() name為:userService -->
<property name="userService" ref="userService"></property>
</bean>
<!-- UserService -->
<bean id="userService" class="edu.cloud.second.UserService">
<!-- 不用value了,用rel把這個物件引用進來 -->
<property name="userDao" ref="userDao"></property>
</bean>
<!-- UserDao -->
<bean id="userDao" class="edu.cloud.second.UserDao"></bean>
<!-- 內部Bean -->
<bean id="userAction2" class="edu.cloud.second.UserAction">
<property name="userService">
<bean class="edu.cloud.second.UserService">
<property name="userDao">
<bean class="edu.cloud.second.UserDao"></bean>
</property>
</bean>
</property>
</bean>
3、P名稱空間,屬性注入優化
xml標頭檔案包含:xmlns:p="http://www.springframework.org/schema/p"
<!-- p:屬性注入 -->
<bean id="user" class="edu.cloud.second.User" p:id="999" p:name="Jack"></bean>
<!-- p:set方法注入 ref 引用-->
<bean id="userDao" class="edu.cloud.second.UserDao"></bean>
<bean id="userService" class="edu.cloud.second.UserService" p:userDao-ref="userDao"></bean>
<bean id="userAction2" class="edu.cloud.second.UserAction" p:userService-ref="userService"></bean>