通过调用静态工厂方法创建 bean:

  • 调用静态工厂方法创建 bean 是将对象创建的过程封装到静态方法中 , 当客户端需要对象时 , 只需要简单地调用静态方法 , 而不需要关心创建对象的细节。
  • 要声明通过静态方法创建的 bean , 需要在 bean 的 class 属性里面指定拥有该工厂的方法的类 , 同时在 factory-method 属性里指定工厂方法的名称。最后 , 使用 <constructor-arg> 元素为该方法传递方法参数。
  1. <?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. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  5.  
  6. <bean id="car" class="com.itdoc.spring.factory.StaticFactory"
  7. factory-method="getCar">
  8. <constructor-arg value="Maserati"/>
  9. </bean>
  10.  
  11. </beans>
  1. package com.itdoc.spring.factory;
  2.  
  3. /**
  4. * http://www.cnblogs.com/goodcheap
  5. *
  6. * @author: Wáng Chéng Dá
  7. * @create: 2017-03-02 19:30
  8. */
  9. public class Car {
  10.  
  11. private String brand;
  12.  
  13. private double price;
  14.  
  15. public String getBrand() {
  16. return brand;
  17. }
  18.  
  19. public void setBrand(String brand) {
  20. this.brand = brand;
  21. }
  22.  
  23. public double getPrice() {
  24. return price;
  25. }
  26.  
  27. public void setPrice(double price) {
  28. this.price = price;
  29. }
  30.  
  31. public Car(String brand, double price) {
  32. this.brand = brand;
  33. this.price = price;
  34. }
  35.  
  36. public Car() {
  37. }
  38.  
  39. @Override
  40. public String toString() {
  41. return "Car{" +
  42. "brand='" + brand + '\'' +
  43. ", price=" + price +
  44. '}';
  45. }
  46. }
  1. package com.itdoc.spring.factory;
  2.  
  3. import java.util.HashMap;
  4. import java.util.Map;
  5.  
  6. /**
  7. * 静态工厂方法
  8. * http://www.cnblogs.com/goodcheap
  9. *
  10. * @author: Wáng Chéng Dá
  11. * @create: 2017-03-02 19:27
  12. */
  13. public class StaticFactory {
  14.  
  15. public static Map<String, Car> cars = new HashMap<String, Car>();
  16.  
  17. static {
  18. cars.put("Ferrari", new Car("Ferrari", 25000000));
  19. cars.put("Maserati", new Car("Maserati", 2870000));
  20. }
  21.  
  22. public static Car getCar(String name) {
  23. return cars.get(name);
  24. }
  25.  
  26. }
  1. package com.itdoc.spring.factory;
  2.  
  3. import org.springframework.beans.factory.FactoryBean;
  4. import org.springframework.context.ApplicationContext;
  5. import org.springframework.context.support.ClassPathXmlApplicationContext;
  6.  
  7. /**
  8. * http://www.cnblogs.com/goodcheap
  9. *
  10. * @author: Wáng Chéng Dá
  11. * @create: 2017-03-02 19:41
  12. */
  13. public class Main {
  14.  
  15. public static void main(String[] args) {
  16.  
  17. ApplicationContext ctx = new ClassPathXmlApplicationContext("factory-beans.xml");
  18. Car car = (Car) ctx.getBean("car");
  19. System.out.println(car);
  20.  
  21. }
  22. }

控制台输出:

Car{brand='Maserati', price=2870000.0}

通过调用实例工厂方法创建 bean:

  • 实例工厂方法:将对象的创建过程封装到另外一个对象实例的方法里。当客户端需要请求对象时 , 只需要简单的调用该实例方法而不需要关心对象的创建细节。
  • 要声明通过实例工厂方法创建的 bean
  1. 在 bean 的factory-bean 属性里指定拥有该工厂方法的bean。
  2. 在 factory-method 属性里指定该工厂方法的名称。
  3. 使用 <constructor-arg> 元素为工厂方法传递方法参数。
  1. <?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. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  5.  
  6. <bean id="carFactory" class="com.itdoc.spring.factory.InstanceFactory"></bean>
  7.  
  8. <bean id="car2" factory-bean="carFactory" factory-method="getCar">
  9. <constructor-arg value="Ferrari"/>
  10. </bean>
  11.  
  12. </beans>
  1. package com.itdoc.spring.factory;
  2.  
  3. import java.util.HashMap;
  4. import java.util.Map;
  5.  
  6. /**
  7. * 实例工厂方法
  8. * http://www.cnblogs.com/goodcheap
  9. *
  10. * @author: Wáng Chéng Dá
  11. * @create: 2017-03-02 20:02
  12. */
  13. public class InstanceFactory {
  14.  
  15. private Map<String, Car> cars = null;
  16.  
  17. public InstanceFactory() {
  18. cars = new HashMap<String, Car>();
  19. cars.put("Ferrari", new Car("Ferrari", 25000000));
  20. cars.put("Maserati", new Car("Maserati", 2870000));
  21. }
  22.  
  23. public Car getCar(String name) {
  24. return cars.get(name);
  25. }
  26. }
  1. package com.itdoc.spring.factory;
  2.  
  3. import org.springframework.context.ApplicationContext;
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;
  5.  
  6. /**
  7. * http://www.cnblogs.com/goodcheap
  8. *
  9. * @author: Wáng Chéng Dá
  10. * @create: 2017-03-02 19:41
  11. */
  12. public class Main {
  13.  
  14. public static void main(String[] args) {
  15.  
  16. ApplicationContext ctx = new ClassPathXmlApplicationContext("factory-beans.xml");
  17.  
  18. car = (Car) ctx.getBean("car2");
  19. System.out.println(car);
  20.  
  21. }
  22. }

控制台输出:

Car{brand='Ferrari', price=2.5E7}

Spring学习--静态工厂方法、实例工厂方法创建 Bean的更多相关文章

  1. [原创]java WEB学习笔记102:Spring学习---Spring Bean配置:bean配置方式(工厂方法(静态工厂方法 & 实例工厂方法)、FactoryBean) 全类名

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  2. Spring第一课:基于XML装配bean(四),三种实例化方式:默认构造、静态工厂、实例工厂

    Spring中基于XML中的装配bean有三种方式: 1.默认构造 2.静态工厂 3.实例工厂 1.默认构造 在我们在Spring的xml文件中直接通过:     <bean id=" ...

  3. java:Spring框架2(bean的作用域,静态工厂和实例工厂,自动装配,动态代理)

    1.bean的作用域,静态工厂和实例工厂: bean.xml: <?xml version="1.0" encoding="UTF-8"?> < ...

  4. 【Spring】Spring中的Bean - 2、Baen的实例化 (构造器、静态工厂、实例工厂)

    Bean的实例化 文章目录 Bean的实例化 构造器实例化 静态工厂方式实例化 实例工厂方式实例化 简单记录-Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)-S ...

  5. spring 学习(一):使用 intellijIDEA 创建 maven 工程进行 Spring ioc 测试

    spring学习(一):使用 intellijIDEA 创建 maven 工程进行 Spring ioc 测试 ioc 概念 控制反转(Inversion of Control,缩写为IOC),是面向 ...

  6. Spring(十三):使用工厂方法来配置Bean的两种方式(静态工厂方法&实例工厂方法)

    通过调用静态工厂方法创建Bean 1)调用静态工厂方法创建Bean是将对象创建的过程封装到静态方法中.当客户端需要对象时,只需要简单地调用静态方法,而不需要关心创建对象的具体细节. 2)要声明通过静态 ...

  7. Spring实例化Bean三种方法:构造器、静态工厂、实例工厂

    Spring中Bean相当于java中的类,可以通过xml文件对bean进行配置和管理. 一.Bean的实例化: 构造器实例化.静态工厂实例化.实例工厂方式实例化. 目录: 构造器实例化: xml配置 ...

  8. Spring基础(3) : 静态工厂和实例工厂创建bean

    public class Factory { public static Person staticCreate(){ Person p = new Person(); p.name="st ...

  9. Spring学习之Aop的各种增强方法

    AspectJ允许使用注解用于定义切面.切入点和增强处理,而Spring框架则可以识别并根据这些注解来生成AOP代理.Spring只是使用了和AspectJ 5一样的注解,但并没有使用AspectJ的 ...

随机推荐

  1. 4-14-17 JavaScript知识点总结(包括JOSN, ajax等,来源w3c)

    JavaScript 也称 ECMAScript as "JavaScript" It is designed to run as a scripting language in ...

  2. Android之RecyclerView实现时光轴

    做项目的过程中有个需求需要时光轴,于是网上找了部分资料 ,写了个案例,现在分享给大家. 如图: activity_main.xml <?xml version="1.0" e ...

  3. service几种访问类型(集群外负载均衡访问LoadBalancer , 集群内访问ClusterIP,VPC内网负载均衡LoadBalancer ,集群外访问NodePort)

    一.集群外访问(负载均衡) kind: ServiceapiVersion: v1spec: ports: - protocol: TCP port: 4341 targetPort: 8080 no ...

  4. 多目标跟踪方法:deep-sort

    多目标跟踪方法:deep-sort deep_sort Multitarget tracking data association 读'Simple Online and Realtime Track ...

  5. html选择器

    1.标签选择器:针对的是元素. <html><head><style type="text/css">p{font:"宋体" ...

  6. TCP/IP四层与OSI七层模型

      OSI七层和TCP/IP四层的关系 1.1 OSI引入了服务.接口.协议.分层的概念,TCP/IP借鉴了OSI的这些概念建立TCP/IP模型. 1.2 OSI先有模型,后有协议,先有标准,后进行实 ...

  7. UVA-818 Cutting Chains (位压缩+暴力搜索)

    题目大意:一种环能打开和闭合.现在有n(1<=n<=15)个编号为1~n的环错综复杂的连接着,要打开一些环重新连接使这n个环能构成一条链,问最少需要打开几次环可达到目的? 题目分析:用二进 ...

  8. POJ-1129 Channel Allocation (DFS)

    Description When a radio station is broadcasting over a very large area, repeaters are used to retra ...

  9. WebForm页面数据绑定总结

    总述 绑定语法 第一种: <%= str%> 例子:'<%= DateTime.Now %>'适用条件:用于非服务器端控件的属性第二种: <%= str%> 从出现 ...

  10. Eclipse详细设置护眼背景色和字体颜色

    代码区背景色: 参考地址: http://jingyan.baidu.com/article/d5a880eb6c4f7813f147ccef.html Package  explorer 颜色 : ...