定义接口: 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(); }