深入学习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方法配置了一个单例类的实例


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

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

Spring的实例工厂方法和静态工厂方法  静态工厂方法:直接调用静态方法可以返回Bean的实例 package com.zhu.string.factory; import java.util....

基于Spring注解实现的工厂模式

本文转自oschina南寒之星的博文,原文链接如下:https://my.oschina.net/u/923324/blog/832269 摘要: 工厂模式是大家熟知的一种设计模式,在spring ...

spring四种依赖注入方式 (set,构造器,工厂,注解 )

平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程...

Spring 通过工厂方法(Factory Method)来配置bean

Spring 通过工厂方法(Factory Method)来配置bean在Spring的世界中, 我们通常会利用bean config file 或者 annotation注解方式来配置bean.在第...
  • nvd11
  • nvd11
  • 2016年05月31日 00:26
  • 12986

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

定义接口: package Bean.FactoryMethods;public interface Axe ...{   public String chop();}package Bean.Fac...

《Spring》------对象的创建机制剖析

前言 利用Spring框架,我们很方便的将对象管理起来,比如说:“从对象的创建(Ioc),到对象的使用(DI)”。那么在对象是以何种方式创建的,以及其创建的时间,还有创建对象是单例的还是多例是怎么控制...

Spring中通过工厂方法获取bean实例

工厂方法获取bean实例:1:静态工厂方法   2:实例工厂方法 一::静态工厂方法获取bean实例 1;Car package com.bean.factory; public cl...

基于zookeeper的dubbo基础教程

首先新建一个接口: package com.unj.dubbotest.provider; public abstract interface DemoService {    public abst...

深入学习Spring框架之二构造器注入方式装配Bean

这一节我们来看看怎么使用Spring创建我们的Bean对象。     容器是Spring的核心,Spring的容器有两种类型:Bean工厂,由BeanFactory接口定义,是最简单的容器;以及应用上...
  • lycyl
  • lycyl
  • 2016年09月06日 16:03
  • 789

Spring框架学习(8):通过工厂方法配置bean

通过工厂方法配置bean有两种方式:一是通过静态工厂方法来配置,二是通过工厂实例方法来配置 一、静态工厂方法配置bean 写一个静态工厂方法的类: package factory; impor...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深入学习Spring框架之五通过工厂方法创建Bean
举报原因:
原因补充:

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