liguofeng29’s blog

個人勉強用ブログだっす。

Spring4 - Beanを生成する三つの方式

  1. コンストラクタによる生成

    • <constructor-arg.../>
  2. 静的factoryによる生成 : 工場Beanを生成する必要がない

    • factory-method
  3. 動的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();
        }
    }
}