定义接口: package Bean.FactoryMethods; public interface Axe ... { public String chop();} package Bean.FactoryMethods; public interface Person ... { public void useAxe();} 实现类: package Bean.FactoryMethods; public class AmericanPerson implements Person ... { private Axe axe; public Axe getAxe() ...{ return axe; } public void setAxe(Axe axe) ...{ this.axe = axe; } public void useAxe() ...{ System.out.println(axe.chop()); }} package Bean.FactoryMethods; public class ChinesePerson implements Person ... { private Axe axe; public Axe getAxe() ...{ return axe; } public void setAxe(Axe axe) ...{ this.axe = axe; } public void useAxe() ...{ System.out.println(axe.chop()); }} package Bean.FactoryMethods; public class SteelAxe implements Axe ... { public String chop() ...{ return "这是一把铁斧子"; }} package Bean.FactoryMethods; public class WoodAxe implements Axe ... { public String chop() ...{ return "这是一把木头斧子"; }} 工厂类(非静态工厂方法) package Bean.FactoryMethods; import Bean.staticFactoryBean. * ; public class BeingFactory ... { public Person getPerson(String arg)...{ if(arg.equalsIgnoreCase("chinese"))...{ return new ChinesePerson(); } else...{ return new AmericanPerson(); } }} 配置文件: <? xml version="1.0" encoding="UTF-8" ?> <! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" > < beans > < bean id ="factory" class ="Bean.FactoryMethods.BeingFactory" > </ bean > < bean id ="chinese" factory-bean ="factory" factory-method ="getPerson" > < constructor-arg > < value > chinese </ value > </ constructor-arg > < property name ="axe" > < ref local ="woodaxe" /> </ property > </ bean > < bean id ="american" factory-bean ="factory" factory-method ="getPerson" > < constructor-arg > < value > american </ value > </ constructor-arg > < property name ="axe" > < ref local ="steelaxe" /> </ property > </ bean > < bean id ="woodaxe" class ="Bean.FactoryMethods.WoodAxe" ></ bean > < bean id ="steelaxe" class ="Bean.FactoryMethods.SteelAxe" ></ bean > </ beans > 测试代码: public static void main(String[] args) throws Exception ... { String path=new Test().getClass().getResource("/").getPath(); String realpath=path.substring(1, path.length()); ApplicationContext context=new FileSystemXmlApplicationContext(realpath+"/factoryMethodbeans.xml"); Person person1=(Person)context.getBean("chinese"); person1.useAxe(); Person person2=(Person)context.getBean("american"); person2.useAxe(); }