深入学习Spring框架之五通过工厂方法创建Bean

原创 2016年09月08日 16:01:37

    前面我们介绍了,通过构造器的方式创建Bean对象,今天我们来讲一下通过工厂方法来创建Bean。

    有些时候,我们有必要将一些类设置为单例模式,比如说一个国家的最高领导人,再比如我们在银行办理业务的时候,整个业务流程中间,我们作为银行的客户身份必须是独一无二,不然你的钱存到了别人账户里去了,那你能干吗?

    下面是类的具体实现:

/**
 * 我们只希望有一个习大大,所以外面没有其他方式创建
 * 只能通过静态工厂方法获得,忠于习大大的领导
 * @author liuyc
 */
public class TopLeader {
	private TopLeader(){
		
	}
	/**
	 * 内部类,延迟加载实例
	 * @author liuyc
	 */
	private static class SingleToLeaderControllor{
		static final TopLeader instance = new TopLeader();
	}
	
	public static TopLeader getInstance(){
		return SingleToLeaderControllor.instance;
	}
}
    在这里我们运用了一种被称为initialization on demand holder的技术来创建单例类的实例,说白了就是延迟加载单例模式。

    往深一点讲,这得益于Java虚拟机初始化阶段的特性,当一个类被JVM加载,这个类就会历经初始化的过程。既然这个类没有其他静态的变量需要初始化,那么初始化过程就会顺利完成。而定义在类里面的静态类SingleToLeaderControllor直到JVM确定SingleToLeaderControllor一定会被执行的时候才会去初始化。

    当静态方法getInstance调用时,静态类SingleToLeaderControllor被执行,当这件事第一次发生时,JVM这才去加载并初始化SingleToLeaderControllor 

    SingleToLeaderControllor的初始化导致了静态变量instance的初始化,而内部类和外部类的初始化过程是串行操作的,而静态变量又在类的初始化过程中被写入,所以调用getInstance方法返回的是相同的instance,所以即使在并行操作环境下,也不用再考虑同步的开销。


    回到我们的主题,怎么在Spring中通过工厂方法创建Bean呢?

    <bean>元素有一个factory-method,允许我们指定一个静态方法代替构造方法创建类的实例。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
	
	<bean id="leader"  class ="com.cm2easy.miki.example.chapter1.TopLeader" factory-method="getInstance"></bean>
</beans>
    至此,我们就使用Spring的factory-method方法配置了一个单例类的实例


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lycyl/article/details/52469683

Spring通过工厂方法配置Bean

通过静态工厂方法配置Bean1、调用静态工厂方法创建Bean是将对象创建的过程封装到静态方法中,当客户端需要对象时,只需要简单地调用静态方法,而不用关心创建对象的细节 2、要声明通过静态方法创建的B...
  • jyxmust
  • jyxmust
  • 2017-02-01 23:56:46
  • 3550

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

Spring的实例工厂方法和静态工厂方法  静态工厂方法:直接调用静态方法可以返回Bean的实例 package com.zhu.string.factory; import java.util....
  • zhupengqq
  • zhupengqq
  • 2016-07-01 21:03:30
  • 5958

Spring中的设计模式--工厂方法模式

关于工厂模式的误会这是个老生常谈的问题,很多新手或者不太在意设计模式的同事会对工厂模式有极深的误解,总会把“工厂模式”与“静态工厂方法”混为一谈,什么是静态工厂方法呢?可以看一个非常简单的例子:pub...
  • zstu_cc
  • zstu_cc
  • 2017-01-02 19:40:20
  • 5917

Spring初探之bean工厂(上)

Spring是什么?Spring的中文名是春天,它是软件开发人的春天,是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架。我以一个简单的示例解构spring是怎样管理java对象的。 首...
  • Windy83
  • Windy83
  • 2012-03-28 23:22:35
  • 7007

Spring Bean工厂创建Bean实例的方法之使用工厂类

定义接口: package Bean.FactoryMethods;public interface Axe ...{   public String chop();}package Bean.Fac...
  • daryl715
  • daryl715
  • 2007-03-23 17:54:00
  • 3260

Spring获取bean工厂的两种方法

从ApplicationContex 应用上下文容器中获取bean和从bean工厂容器中获取bean 具体案例: //从ApplicationContext中取bean ApplicationC...
  • binbin199604
  • binbin199604
  • 2017-04-13 09:46:57
  • 636

Spring 实现两种设计模式:工厂模式和单态模式

本文摘自:李刚 著 《轻量级 Java EE企业应用实战 Struts2+Spring+hibernate整合开发》                   在Spring 中大量使用的以下两种设...
  • Titilover
  • Titilover
  • 2011-08-31 13:05:01
  • 28175

工厂方法模式实例

题目: 现需要设计一个程序来读取多种不同类型的图片格式,针对每一种图片格式都设计一个图片读取器(ImageReader),如GIF图片读取器(GifReader)用于读取GIF格式的图片、JPG...
  • yuzhiyun3536
  • yuzhiyun3536
  • 2016-12-25 13:16:27
  • 1005

工厂方法模式详解

作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可。            ...
  • u013445530
  • u013445530
  • 2016-02-19 15:04:36
  • 883

创建型模式:工厂方法模式(Factory Method)--分析优缺点

转载地址:http://blog.csdn.net/lingyun_blog/article/details/41450085 请MM去麦当劳吃汉堡,不同的MM有不同的口味,要每个都记住是一件烦人的...
  • qq_25551295
  • qq_25551295
  • 2015-11-14 18:05:26
  • 530
收藏助手
不良信息举报
您举报文章:深入学习Spring框架之五通过工厂方法创建Bean
举报原因:
原因补充:

(最多只允许输入30个字)