静态工厂
工厂类
public class AppleFactory {
public static Apple newInstance(String color) {
return new Apple(color);
}
}
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="AppleFactory" class="cn.lee.factory.AppleFactory" factory-method="newInstance">
<constructor-arg index="0" value="red"></constructor-arg>
</bean>
</beans>
测试代码
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
Apple hongFuShi = (Apple)context.getBean("AppleFactory");
System.out.println(hongFuShi.getColor());
输出
red
动态工厂
工厂类(与静态工厂相比只是少了static)
public class DynamicAppleFactory {
public Apple newInstance(String color) {
return new Apple(color);
}
}
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="dynamicAppleFactory" class="cn.lee.factory.DynamicAppleFactory"></bean>
<bean id="Apple" factory-bean="dynamicAppleFactory" factory-method="newInstance">
<constructor-arg value="red"></constructor-arg>
</bean>
</beans>
测试代码
ApplicationContext context = new ClassPathXmlApplicationContext("beans2.xml");
Apple hongFuShi = (Apple)context.getBean("Apple");
System.out.println(hongFuShi.getColor());
输出
red