Spring的实例工厂方法和静态工厂方法

Spring的实例工厂方法和静态工厂方法

静态工厂方法:直接调用静态方法可以返回Bean的实例

[java] view plain copy

  1. package com.zhu.string.factory;  
  2.   
  3. import java.util.HashMap;  
  4. import java.util.Map;  
  5.   
  6. public class StaticCarFactory {  
  7.     /** 
  8.      * 静态工厂方法:直接调用静态方法可以返回Bean的实例 
  9.      * 
  10.      */  
  11.     private static Map<String ,Car >  cars=new HashMap<String , Car>();  
  12.     static{  
  13.         cars.put("audi",    new Car(3000, "aodi"));  
  14.         cars.put("fodo",    new Car(3000, "aodi"));  
  15.     }  
  16.     //静态工厂方法  
  17.     public static Car getCar(String name){        
  18.         return cars.get(name);  
  19.     }  
  20. }  

实例工厂方法。即调用工厂本身,再调用工厂的实例方法来返回bean实例

[java] view plain copy

  1. package com.zhu.string.factory;  
  2.   
  3. import java.util.HashMap;  
  4. import java.util.Map;  
  5.   
  6. public class InstanceCarFactory {  
  7.     /** 
  8.      * 实例工厂方法。即调用工厂本身,再调用工厂的实例方法来返回bean实例 
  9.      */  
  10.     private Map<String ,Car> cars=null;  
  11.     public InstanceCarFactory() {  
  12.         // TODO Auto-generated constructor stub  
  13.         cars=new HashMap<String, Car>();  
  14.         cars.put("audi", new Car(1000,"audi"));  
  15.         cars.put("dffdas", new Car(2000,"audi"));  
  16.     }  
  17.     public Car getCar(String brand){  
  18.         return cars.get(brand);  
  19.     }  
  20. }  

beans-factory.xml

[html] view plain copy

  1. <span style="font-size:14px;"><?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  4.   
  5. xmlns:p="http://www.springframework.org/schema/p"  
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans   
  7.   
  8. http://www.springframework.org/schema/beans/spring-beans.xsd">  
  9.   
  10.     <!-- 通过静态方法来配置bean,注意不是配置静态工厂方法实例,而是配置bean实例  
  11.  
  12. -->  
  13.     <!--  
  14.         class属性:指向静态方法的全类名 factory-method:指向静态方法的名字  
  15.         constructor-arg:如果工厂方法需要传入参数,则使用constructor-arg来配  
  16.   
  17. 置参数  
  18.     -->  
  19.     <bean id="car1" factory-method="getCar"  
  20.         class="com.zhu.string.factory.StaticCarFactory">  
  21.         <constructor-arg value="audi"></constructor-arg>  
  22.     </bean>  
  23.     <!-- 配置工厂的实例 -->  
  24.     <bean id="carFactory" class="com.zhu.string.factory.InstanceCarFactory">  
  25.     </bean>  
  26.     <bean id="car2" factory-bean="carFactory" factory-method="getCar">  
  27.         <constructor-arg value="audi"></constructor-arg>  
  28.     </bean>  
  29. </beans></span>  

Car.java实体类

[java] view plain copy

  1. package com.zhu.string.factory;  
  2.   
  3. public class Car {  
  4.     private double price;  
  5.     private String brand;  
  6.     public double getPrice() {  
  7.         return price;  
  8.     }  
  9.     public void setPrice(double price) {  
  10.         this.price = price;  
  11.     }  
  12.     public String getBrand() {  
  13.         return brand;  
  14.     }  
  15.     public void setBrand(String brand) {  
  16.         this.brand = brand;  
  17.     }  
  18.     @Override  
  19.     public String toString() {  
  20.         return "Car [brand=" + brand + ", price=" + price + "]";  
  21.     }  
  22.     public Car(){  
  23.         System.out.println("cars....constructor");  
  24.     }  
  25.     public Car(double price, String brand) {  
  26.         super();  
  27.         this.price = price;  
  28.         this.brand = brand;  
  29.     }  
  30.       
  31. }  

Main.java[java] view plain copy

  1. package com.zhu.string.factory;  
  2.   
  3. import org.springframework.context.ApplicationContext;  
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  5.   
  6. public class Main {  
  7.   
  8.     /** 
  9.      * @param args 
  10.      */  
  11.     public static void main(String[] args) {  
  12.         // TODO Auto-generated method stub  
  13.         ApplicationContext  cx=new ClassPathXmlApplicationContext("beans-  
  14.   
  15. factory.xml");  
  16.         Car car1=(Car) cx.getBean("car1");  
  17.         System.out.println(car1);  
  18.           
  19.         Car car2=(Car) cx.getBean("car2");  
  20.         System.out.println(car2);  
  21.     }  
  22.   
  23. }  


 

运行结果:

Car [brand=aodi, price=3000.0]
Car [brand=audi, price=1000.0]

发布了146 篇原创文章 · 获赞 1 · 访问量 1777

猜你喜欢

转载自blog.csdn.net/zhupengqq1/article/details/104041192
今日推荐