Spring通过工厂方法创建对象

静态工厂

工厂类

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

猜你喜欢

转载自blog.csdn.net/qq_40392686/article/details/82918758