Spring IOC 容器負責建立 Bean 並注入依賴,XML 配置下主要有四種注入方式:Setter 注入、建構子注入、靜態工廠方法注入、實例工廠方法注入。
Bean 類提供 setter 方法,XML 用 <property name="prop" ref="beanName"/>。
<bean name="springAction" class="com.example.SpringAction">
<property name="springDao" ref="springDao"/>
</bean>
<bean name="springDao" class="com.example.SpringDaoImpl"/>
Bean 類提供帶參建構子,XML 用 <constructor-arg ref="..."/>。參數順序可用 index 或 type 明確指定。
<bean name="springAction" class="com.example.SpringAction">
<constructor-arg index="0" ref="springDao"/>
<constructor-arg index="1" ref="user"/>
</bean>
工廠類提供 static 方法回傳 Bean 實例。XML 指定 class 為工廠類,factory-method 為靜態方法名。
<bean name="staticFactoryDao" class="com.example.DaoFactory" factory-method="getStaticFactoryDaoImpl"/>
<bean name="springAction" class="com.example.SpringAction">
<property name="staticFactoryDao" ref="staticFactoryDao"/>
</bean>
工廠類提供非靜態方法。需先將工廠類本身定義為 Bean,再用 factory-bean + factory-method 取得實例。
<bean name="daoFactory" class="com.example.DaoFactory"/>
<bean name="factoryDao" factory-bean="daoFactory" factory-method="getFactoryDaoImpl"/>
<bean name="springAction" class="com.example.SpringAction">
<property name="factoryDao" ref="factoryDao"/>
</bean>
預設 singleton (單例)。需多例時加 scope="prototype":<bean ... scope="prototype">。