Person.java :
public interface Person {
public String sayHello(String name);
public String sayGoodBye(String name);
}
Chinese.java :
public class Chinese implements Person {
@Override
public String sayGoodBye(String name) {
return name+",再见!";
}
@Override
public String sayHello(String name) {
return name+",你好";
}
}
American.java :
public class American implements Person {
@Override
public String sayGoodBye(String name) {
return name+",Good Bye !";
}
@Override
public String sayHello(String name) {
return name+",Hello !";
}
}
PersonFactory.java :
public class PersonFactory {
public Person getPerson(String ethnic){
if(ethnic.equalsIgnoreCase("chin")){
return new Chinese();
}else{
return new American();
}
}
}
bean.xml核心配置 :
<bean id="personFactory" class="com.bean.PersonFactory"/>
<bean id="chinese" factory-bean="personFactory" factory-method="getPerson">
<constructor-arg value="chin"/>
</bean>
<bean id="american" factory-bean="personFactory" factory-method="getPerson">
<constructor-arg value="ame"/>
</bean>
Test.java :
public class Test {
public static void main(String[] args) {
ApplicationContext ctx=new ClassPathXmlApplicationContext("bean.xml");
Person p1=(Person) ctx.getBean("chinese");
System.out.println(p1.sayGoodBye("tom")+p1.sayHello("tom"));
Person p2=(Person) ctx.getBean("american");
System.out.println(p2.sayGoodBye("tom")+p2.sayHello("tom"));
}
}
运行Test.java,控制台输出: