spring学习-02

spEL

 

根据工厂方法配置bean

<?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-3.1.xsd">


    <!-- 通过静态工厂方法配置bean,注意不是配置静态工厂方法实例,而是bean实例 -->
    <!-- 
        class属性:指向静态工厂方法的全类名
        factory-method:指向静态工厂方法名
        constructor-arg:如果工厂方法需要传入参数,则使用constructor-arg来配置参数
     -->
    <bean id = "car1" class = "com.spring.factory.StaticCarFactory"
    factory-method="getCar">
    <constructor-arg value = "audi"></constructor-arg>
    </bean>
    
    <!-- 配置工厂实例 -->
    <bean id = "carFactory" class = "com.spring.factory.InstanceCarFactory"></bean>
    
    <!-- 通过实例工厂方法来配置bean -->
    <!-- 
        factory-bean:指向实例工厂方法的bean
        factory-method:指向静态工厂方法名
        constructor-arg:如果工厂方法需要传入参数,则使用constructor-arg来配置参数
     -->
    <bean id = "car2" factory-bean="carFactory" factory-method="getCar">
        <constructor-arg value = "ford"></constructor-arg>
    </bean>
</beans>
/**
 * 
 * 静态工厂方法:直接调用某一个类的静态方法,就可以返回bean的实例
 *
 */
public class StaticCarFactory {

	private static Map<String, Car> cars = new HashMap<String, Car>();
	
	static{
		cars.put("audi", new Car("Audi",300000));
		cars.put("ford", new Car("ford",400000));
	}
	//静态工厂方法
	public static Car getCar(String name){
		return cars.get(name);
	}
}
/**
 * 
 * 实例工厂的方法,即需要创建工厂本身,
 *
 */
public class InstanceCarFactory {

	private Map<String, Car> cars = null;
	
	public InstanceCarFactory(){
		cars = new HashMap<String, Car>();
		cars.put("audi", new Car("Audi",300000));
		cars.put("ford", new Car("ford",400000));
	}
	
	public Car getCar(String name){
		return cars.get(name);
	}
}

猜你喜欢

转载自blog.csdn.net/qq_35815781/article/details/81545149