Spring中factory-method的用法

1. 通过静态方法实例化一个bean,实例化出来的bean的类型对应于静态方法的返回类型,这地点不同于普通的bean
   (1) 静态方法无参数:
   <bean id="thefmbean" class="springtest.FactoryMethodBean" factory-method="getInstance" />
  (2) 静态方法有一个参数
   <bean id="thenamedfmbean" class="springtest.FactoryMethodBean" 
         factory-method="getNamedInstance">
        <constructor-arg value="China" />
  </bean>
  这里<constructor-arg value="China" />表示为静态方法参数的值
 (3) 对于(2)实例化出来的bean,再进行属性set
   <bean id="thenamedfmbean" class="springtest.FactoryMethodBean" 
         factory-method="getNamedInstance">
        <constructor-arg value="China" />
        <property name="id" value="20" />
  </bean>
2. 对一个已经实例化的bean,得到其普通方法返回的对象,参数方式与1完全相同
  <bean id="duke" class="springtest.Juggler">
    <constructor-arg value="15" />
  </bean>
  <bean id="employee" factory-bean="duke" factory-method="getYourEmployee">
    <constructor-arg value="Mike" />
    <property name="id" value="18" />
  </bean>


  其中duke为以普通方式实例化出来的bean,通过factory-method得到的是Employee的一个对象
  
package springtest;


public interface Performer
{


void perform() throws PerformanceException;


}
package springtest;


public class FactoryMethodBean implements Performer
{
private String name = "Hello";
private int id;

private FactoryMethodBean()
{

}

public void setId(int id)
{
this.id = id;
}

private static class StaticFactoryMethodBean
{
static FactoryMethodBean instance = new FactoryMethodBean();
}

public static FactoryMethodBean getInstance()
{
return StaticFactoryMethodBean.instance;
}

public static FactoryMethodBean getNamedInstance(String tmpName)
{
StaticFactoryMethodBean.instance.name = tmpName;
return StaticFactoryMethodBean.instance;
}


@Override
    public void perform() throws PerformanceException
    {
   System.out.println("FactoryMethodBean.name = " + name);
    }

public String getNewName()
{
return "new name";
}
}


package springtest;


public class Juggler implements Performer
{
private int beanBags = 3;

public Juggler()
{

}

public Juggler(int beanBags)
{
this.beanBags = beanBags;
}

@Override
public void perform() throws PerformanceException
{
System.out.println("Juggling " + beanBags + " beanBags");
}

public String getMyName()
{
return "My Name";
}

public String getYourName(String yourName)
{
return "Your name is " + yourName;
}

public Employee getYourEmployee(String adName)
{
return new Employee(adName);
}
}


package springtest;


public class Employee
{
private int id;
private String name;

public Employee(String name)
{
this.name = name;
}

public Employee()
{

}

public void setId(int id)
{
this.id = id;
}

public void setName(String name)
{
this.name = name;
}

public int getId()
{
return id;
}

public String getName()
{
return name;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值