- 通过实例工厂创建bean的时候要先创建一个工厂类的bean,然后在其他需要用这个工厂类实例化的bean的标签中,通过factory-bean属性指定已经配置好的工厂类的bean,再用factory-method方法指定是使用工厂类的哪一个方法来创建是实例。
- 陌上花开,可缓缓观矣~
-
package classPackage; import interfacePackage.Person; //就是简单的类咯,但是是要通过工厂模式实例化 public class American implements Person { @Override public String sayHello(String name){ return name + " say hello"; } @Override public String sayGoodbye(String name){ return name + "say goodbye"; } }
package classPackage; import interfacePackage.Person; //就是简单的类咯,但是是要通过工厂模式实例化 public class Chinese implements Person { @Override public String sayHello(String name){ return name + " 说你好"; } @Override public String sayGoodbye(String name){ return name + "说再见"; } }
package factoryPackage; import classPackage.American; import classPackage.Chinese; import interfacePackage.Person; //这就是工厂类,是个实例工厂。 public class PersonFactory { public Person getPerson(String ethnic){ if(ethnic.equalsIgnoreCase("chin")){ return new Chinese(); }else if(ethnic.equalsIgnoreCase("ameri")){ return new American(); }else { return null; } } }
package interfacePackage; //实现工厂类需要的接口 public interface Person { public String sayHello(String name); public String sayGoodbye(String name); }
package testPackage; import classPackage.American; import classPackage.Chinese; import interfacePackage.Person; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; //测试类 public class SpringTest { public static void main(String []args){ ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml"); Chinese chinese = (Chinese) applicationContext.getBean("chinese", Person.class); System.out.println(chinese.sayHello("可以")); American american = (American)applicationContext.getBean("america", Person.class); System.out.println(american.sayHello("ok")); } }
<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"> <!--定义一个工厂类的bean,下面这些普通的bean就是由这个实例工厂类生产--> <bean id="personFactory" class="factoryPackage.PersonFactory"/> <!--配置一个由实例工厂的bean,要 指定是那个工厂bean的那个方法,和方法需要的参数,再指定 这个bean的成员变量--> <bean id="chinese" factory-bean="personFactory" factory-method="getPerson"> <constructor-arg value="chin"/> </bean> <bean id="america" factory-bean="personFactory" factory-method="getPerson"> <constructor-arg value="ameri"/> </bean> </beans>
这是我看李刚编著的《轻量级javaEE企业应用实战(第五版)-Struts2+Spring5+Hibernate5/JAP2》后总结出来的。
Spring(13) 通过实例工厂 创建Bean
最新推荐文章于 2021-05-08 12:39:17 发布