Spring4 - Beanを生成する三つの方式
コンストラクタによる生成
- <constructor-arg.../>
静的factoryによる生成 : 工場Beanを生成する必要がない
- factory-method
動的factoryによる生成 : 先に工場Beanを生成する
- factory-bean
- factory-method
<?xml version="1.0" encoding="GBK"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd"> <!-- 1. コンストラクタによる生成 --> <!-- 黄ペンを定義 --> <bean id="yellowPen" class="app.impl.YellowPen" /> <!-- 2. 静的工場のよる生成 --> <!-- 赤ペンを定義 --> <bean id="redPen" class="app.factory.StaticPenFactory" factory-method="getPen"> <constructor-arg value="red" /> </bean> <!-- 3. 工場のよる生成 --> <!-- 青ペンを定義 --> <bean id="penFactory" class="app.factory.PenFactory" /> <bean id="bluePen" factory-bean="penFactory" factory-method="getPen"> <constructor-arg value="blue" /> </bean> </beans>
package app.factory; import app.Pen; import app.impl.BluePen; import app.impl.RedPen; import app.impl.YellowPen; //静的ペン工場 public class StaticPenFactory { public static Pen getPen(String color) { System.out.println("静的ペン工場からペンを生成します。"); if("red".equals(color)) { return new RedPen(); } else if("blue".equals(color)) { return new BluePen(); } else { return new YellowPen(); } } }
package app.factory; import app.Pen; import app.impl.BluePen; import app.impl.RedPen; import app.impl.YellowPen; // ペン工場 public class PenFactory { public Pen getPen(String color) { System.out.println("ペン工場からペンを生成します。"); if("red".equals(color)) { return new RedPen(); } else if("blue".equals(color)) { return new BluePen(); } else { return new YellowPen(); } } }