java
User.java
package com.spring.factory; public class User { private String name; private String address; public User() { System.out.println("create user..."); } public User(String name, String address) { super(); this.name = name; this.address = address; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "User [name=" + name + ", address=" + address + "]"; } }
UserStaticFactory.java
package com.spring.factory; import java.util.HashMap; import java.util.Map; //静态工厂类 public class UserStaticFactory { private static Map<String, User> users = new HashMap<String ,User>(); static{ users.put("matt", new User("matt","SH")); users.put("joy", new User("joy","SH")); } public static User getUser(String name){ return users.get(name); } }
UserInstaceFactory.java
package com.spring.factory; import java.util.HashMap; import java.util.Map; //实例工厂类 public class UserInstaceFactory { private Map<String,User> users = null; public UserInstaceFactory() { users = new HashMap<String, User>(); users.put("matt", new User("matt","SH")); users.put("joy", new User("joy","SH")); } public User getUser(String name){ return users.get(name); } }
SpringUserFactory.java
package com.spring.factory; import org.springframework.beans.factory.FactoryBean; //继承Spring FactoryBean的实例 public class SpringUserFactory implements FactoryBean<User>{ private String name; public void setName(String name) { this.name = name; } //返回bean的对象 public User getObject() throws Exception { return new User(name,"SH"); } //返回bean的类型 public Class<?> getObjectType() { return User.class; } public boolean isSingleton() { return true; } }
Main.java
package com.spring.factory; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Main { public static void main(String[] args) { ApplicationContext ext = new ClassPathXmlApplicationContext("factory.xml"); //通过工厂静态方法 User user = (User) ext.getBean("staticFactory"); System.out.println(user); //通过工厂实例方法 User user1 = (User) ext.getBean("user1"); System.out.println(user1); //通过spring factorybean User user2 = (User) ext.getBean("user2"); System.out.println(user2); } }
xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--静态工厂方法配置--> <bean id="staticFactory" class="com.spring.factory.UserStaticFactory" factory-method="getUser"> <constructor-arg value="matt"></constructor-arg> </bean> <!-- 实例工厂方法配置 --> <bean id="instaceFactory" class="com.spring.factory.UserInstaceFactory"></bean> <bean id="user1" factory-bean="instaceFactory" factory-method="getUser"> <constructor-arg value="joy"></constructor-arg> </bean> <!-- 通过继承Spring的factory --> <bean id ="user2" class="com.spring.factory.SpringUserFactory"> <property name="name" value="shire"></property> </bean> </beans>