默认情况下,Spring IoC 容器启动后,在初始化过程中,会以单例模式创建并配置所有使用 singleton 定义的 Bean 的实例。通常情况下,提前实例化 Bean 是可取的,因为这样在配置中的任何错误就会很快被发现,否则可能要几个小时甚至几天后才会被发现。 有时候你可能并不想在 ApplicationContext 初始化时提前实例化某个 singleton 定义的 Bean,那么你可以将改 Bean 设置为延迟实例化。一个延迟实例化的 Bean 在第一次被请求的时候,Spring 容器才会创建该 Bean 的实例,而不是在容器启动的时候。

在 Spring 配置文件中,将 <bean/> 元素的设置 lazy-init 属性的值为 true,便可将该 Bean 定义为延迟实例化的。默认情况下,所有的 singleton Bean 都不是延迟实例化的。如果想让默认的情况下,所有的 singleton Bean 都是延迟实例化的,可以将 Spring 配置文件的根元素 <beans/> 的 default-lazy-init 属性值设置为 true。

延迟实例化的示例

Bean 的定义:

package com.huey.dream.bean;

public class ExampleBean {
public ExampleBean(String type) {
System.out.println("In ExampleBean Constructor, Bean type is " + type);
}
}

Bean 的配置:

<bean id="eb1" class="com.huey.dream.bean.ExampleBean" lazy-init="true" >
<constructor-arg name="type" value="lazyInitBean"/>
</bean> <bean id="eb2" class="com.huey.dream.bean.ExampleBean">
<constructor-arg name="type" value="eagerInitBean"/>
</bean>

测试方法:

@Test
public void testLazyInit() throws Exception {
System.out.println("ApplicationContext 初始化开始!");
ApplicationContext appCtx =
new ClassPathXmlApplicationContext("applicationContext.xml");
System.out.println("ApplicationContext 初始化完毕!"); ExampleBean eb1 = appCtx.getBean("eb1", ExampleBean.class);
ExampleBean eb2 = appCtx.getBean("eb2", ExampleBean.class);
}

结果输出:

ApplicationContext 初始化开始!
2015-5-16 16:02:58 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@1fddc31: startup date [Sat May 16 16:02:58 CST 2015]; root of context hierarchy
2015-5-16 16:02:58 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [applicationContext.xml]
2015-5-16 16:02:59 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@b1cc87: defining beans [eb1,eb2]; root of factory hierarchy
In ExampleBean Constructor, Bean type is eagerInitBean
ApplicationContext 初始化完毕!
In ExampleBean Constructor, Bean type is lazyInitBean

Spring - IoC(7): 延迟实例化的更多相关文章

  1. Spring IOC的配置使用(转)

    转:http://www.cnblogs.com/linjiqin/p/3408306.html Spring IOC的配置使用 1.1.1 XML配置的结构一般配置文件结构如下: <beans ...

  2. Spring IOC之容器概述

    1.SpringIOC容器和beans介绍 IOC的依赖注入是这样的,对象定义他们的依赖也就是他们需要在一起起作用的对象是通过构造器参数以及工厂方法的参数或者是当他们被构建或者是从工厂中返回时设置在对 ...

  3. Spring IOC的配置使用

    1.1.1 XML配置的结构一般配置文件结构如下: <beans> <import resource=”resource1.xml” /> <bean id=”bean1 ...

  4. Spring源码剖析2:Spring IOC容器的加载过程

    spring ioc 容器的加载流程 1.目标:熟练使用spring,并分析其源码,了解其中的思想.这篇主要介绍spring ioc 容器的加载 2.前提条件:会使用debug 3.源码分析方法:In ...

  5. Spring源码剖析3:Spring IOC容器的加载过程

    本文转自五月的仓颉 https://www.cnblogs.com/xrq730 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https ...

  6. Spring(3.2.3) - Beans(7): 延迟实例化

    默认情况下,Spring IoC 容器启动后,在初始化过程中,会以单例模式创建并配置所有使用 singleton 定义的 Bean 的实例.通常情况下,提前实例化 Bean 是可取的,因为这样在配置中 ...

  7. spring IOC容器实例化Bean的方式与RequestContextListener应用

    spring IOC容器实例化Bean的方式有: singleton 在spring IOC容器中仅存在一个Bean实例,Bean以单实例的方式存在. prototype 每次从容器中调用Bean时, ...

  8. Spring IOC的核心机制:实例化与注入

    上文我们介绍了IOC和DI,IOC是一种设计模式,DI是它的具体实现,有很多的框架都有这样的实现,本文主要以spring框架的实现,来看具体的注入实现逻辑. spring是如何将对象加入容器的 spr ...

  9. Spring Ioc源码分析系列--Bean实例化过程(一)

    Spring Ioc源码分析系列--Bean实例化过程(一) 前言 上一篇文章Spring Ioc源码分析系列--Ioc容器注册BeanPostProcessor后置处理器以及事件消息处理已经完成了对 ...

随机推荐

  1. RTL8195AM开发板使用

    1. 本次使用RTL8195AM测试一下,原厂资源地址:https://os.mbed.com/platforms/Realtek-RTL8195AM/ 2. 由于板子支持mbed,所以把CON2连接 ...

  2. 台湾ML笔记--1.2 formalize the learning probelm

    Basic notations input:     x∈χ  (customer application) output:   y∈y  (good/bad after approving cred ...

  3. Viewer.js 图片预览插件使用

    一.简介 Viewer.js 是一款强大的图片查看器. Viewer.js 有以下特点: 支持移动设备触摸事件 支持响应式 支持放大/缩小 支持旋转(类似微博的图片旋转) 支持水平/垂直翻转 支持图片 ...

  4. python+UIAutomation+libary

    #! /usr/bin/env python#Author: XIE TIAN# -*- coding:utf8 -*-from __future__ import unicode_literalsi ...

  5. fiddler显示出服务器IP方法

    fiddler的配置中是看不到服务器的IP的 1.打开进入fiddler界面,按快捷键ctrl+r 或者按照图中点击,进入customrules.js文件里. 2.在customrules.js文件里 ...

  6. Python 3 学习笔记之——面向对象

    1. 类的介绍 类(Class) 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例,类是对象的抽象. 方法:类中定义的函数. 类变量:类变量在整个实 ...

  7. wpf显示视频,image控件闪屏,使用winform控件实现

    使用C#调用mingw的动态库实现视频识别软件,程序通过C++调用opencv打开视频,将图像的原始数据以rgb24的方式传递给C#端,C#通过构造图像对象给控件赋值的方式显示图片. 一开始使用wpf ...

  8. Failed loading D:\Program Files\phpStudy20161103\php\php-5.6.27-nts\ext\php_xdebug.dll

    我用的是phpstudy 更新完composer php 切换composer的国内源的时候老是报找不到\php_xdebug.dll的错误, 原因是, 在php.ini 里面默写就是在Program ...

  9. [leetcode-652-Find Duplicate Subtrees]

    Given a binary tree, return all duplicate subtrees. For each kind of duplicate subtrees, you only ne ...

  10. BZOJ 1923 SDOI2010 外星千足虫 异或方程组+bitset

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1923 懒得贴题目了......这就是解一个异或方程组的裸题...... YY了一下异或方程 ...