Spring的实例工厂方法和静态工厂方法
静态工厂方法:直接调用静态方法可以返回Bean的实例
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. "audi", new Car(3000, "aodi"));
14. "fodo", new Car(3000, "aodi"));
15. }
16. //静态工厂方法
17. public static Car getCar(String name){
18. return cars.get(name);
19. }
20. }
实例工厂方法。即调用工厂本身,再调用工厂的实例方法来返回bean实例
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. new HashMap<String, Car>();
14. "audi", new Car(1000,"audi"));
15. "dffdas", new Car(2000,"audi"));
16. }
17. public Car getCar(String brand){
18. return cars.get(brand);
19. }
20. }
beans-factory.xml
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实体类
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. "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
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. new ClassPathXmlApplicationContext("beans-
14.
15. factory.xml");
16. "car1");
17. System.out.println(car1);
18.
19. "car2");
20. System.out.println(car2);
21. }
22.
23. }
运行结果:
Car [brand=aodi, price=3000.0]
Car [brand=audi, price=1000.0]