1、定义Demo类:

package com.rhythmk.spring;

public class User {

	public void Init ()
{
System.out.println("User 对象被 创建!");
} // 计数器
public int Count=0;
public void Say()
{
this.Count++;
System.out.println("User 被"+this.Count+"次初始!");
} public void Destory()
{
System.out.println("User 对象被销毁!");
}
}

 

2、init-method:对象初始执行

    destroy-method:对象销毁执行:

<bean id="user" class="com.rhythmk.spring.User" init-method="Init"  destroy-method="Destory" >
</bean>

执行单元测试:

@Test
public void test() { BeanFactory bean=new ClassPathXmlApplicationContext("applicationContext.xml");
User user=(User)bean2.getBean("user");
user.Say(); } 输出:
User 对象被 创建!
User 被1次初始!

 3、scope  包括 singleton单例模式  (默认)

                 prototype,Request, Session, Global Session

默认applicationContext.xml 配置 添加测试代码:

	private  static BeanFactory bean= new ClassPathXmlApplicationContext("applicationContext.xml");

	@Test
public void test1() { User user=(User)bean.getBean("user");
user.Say();
} @Test
public void test2() {
User user=(User)bean.getBean("user");
user.Say();
}

  输出:

User 对象被 创建!
User 被1次初始!
User 被2次初始!

修改applicationContext.xml 添加 scope=prototype

<bean id="user" class="com.rhythmk.spring.User" init-method="Init"  destroy-method="Destory" scope="prototype">
</bean>

执行如上测试代码:

输出:

User 对象被 创建!
User 被1次初始!
User 被1次初始!

 4、  lazy-init 默认为 false ,为true时,则在执行“BeanFactory bean= new ClassPathXmlApplicationContext("applicationContext.xml");”

    并未执行初始化,只有在 bean.getBean("user") 才会执行函数初始:

package com.rhythmk.spring;

public class User {
// 计数器
public int Count=0;
public User()
{
System.out.println("User 被"+this.Count+"次初始!");
} public void Say()
{
this.Count++;
System.out.println("User.Say!");
} }

  

4.1 、默认配置:
<bean id="user" class="com.rhythmk.spring.User" lazy-init="false"  >
</bean>

输出:

User 被0次初始!
开始执行测试!
User.Say!

4.2 、调整配置:

<bean id="user" class="com.rhythmk.spring.User" lazy-init="true"  >
</bean>

输出:

开始执行测试!
User 被0次初始!
User.Say!

Rhythmk 一步一步学 JAVA (13) Spring-2 之Ben懒加载以及生命周期,单例的更多相关文章

  1. Java类的加载与生命周期

    一.概要: 类的生命周期从类的 加载.连接.初始化 开始,到类的 卸载结束: 二.几个阶段: 加载:查找并加载类的二进制数据.(把类的.class文件的二进制数据读入内存,存放在运行时数据区的方法区: ...

  2. 详解Java 8中Stream类型的“懒”加载

    在进入正题之前,我们需要先引入Java 8中Stream类型的两个很重要的操作: 中间和终结操作(Intermediate and Terminal Operation) Stream类型有两种类型的 ...

  3. Vue 路由懒加载, VueRouter一步完成Vue的路由懒加载 一行代码搞定懒加载

    Vue Router路由配置中的component里面配置即可 1 // 路由懒加载的方式加载组件 2 3 component: () => import('@/views/Detail'), ...

  4. 结合webpack 一步一步实现懒加载的国际化简易版方案

    想法来源于工作需求,最后倒腾出一个国际化工作流,期望是这样的: 1. 自动化处理国际化文案(表现为转义翻译人员给到的文件处理成技术人员所识别的文件) 2. 转化后的国际化文件能够按需加载,实现懒加载的 ...

  5. Java温故而知新(10)类的加载机制

    类加载是Java程序运行的第一步,研究类的加载有助于了解JVM执行过程,并指导开发者采取更有效的措施配合程序执行. 研究类加载机制的第二个目的是让程序能动态的控制类加载,比如热部署等,提高程序的灵活性 ...

  6. Java类中各种静态变量的加载顺序的学习

    最近在补<thinking in java>...有一节提到了加载类需要做的一些准备...我照着书本敲了一下代码...同时稍微修改了一下书本上的代码.... package charpte ...

  7. java 27 - 1 反射之 类的加载器

    说到反射,首先说类的加载器. 类的加载: 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. 加载: 就是指将class文件读入内存,并为之 ...

  8. Java 单例模式:懒加载(延迟加载)和即时加载

    引言 在开发中,如果某个实例的创建需要消耗很多系统资源,那么我们通常会使用惰性加载机制(或懒加载.延时加载),也就是说只有当使用到这个实例的时候才会创建这个实例,这个好处在单例模式中得到了广泛应用.这 ...

  9. java后台树形结构展示---懒加载

    一.数据库设计 二.实体类:entity import com.joyoung.cloud.security.common.validatedGroup.Add;import com.joyoung. ...

随机推荐

  1. [Math]Pi(1)

    数学知识忘地太快,在博客记录一下pi的生成. 100 Decimal places 3.14159265358979323846264338327950288419716939937510582097 ...

  2. Linux系统管理员必备参考资料下载汇总

    Linux系统管理员必备: Linux系统管理工具包系列汇总 Linux系统管理员必看 VanDyke SecureCRT 6.1.3 附特别文件 鸟哥的Linux私房菜 基础学习篇 (第二版) 高清 ...

  3. 使用dlopen和dlsym来使用C++中的类

    http://my.oschina.net/u/1450061/blog/204608

  4. BZOJ4974:[Lydsy1708月赛]字符串大师(逆模拟KMP)

    题目描述 一个串T是S的循环节,当且仅当存在正整数k,使得S是T k  Tk (即T重复k次)的前缀,比如abcd是abcdabcdab的循环节.给定一个长度为n的仅由小写字符构成的字符串S,请对于每 ...

  5. CodeForces - 258D:Little Elephant and Broken Sorting(概率DP)

    题意:长度为n的排列,m次交换xi, yi,每个交换x,y有50%的概率不发生,问逆序数的期望  .n, m <= 1000 思路:我们只用维护大小关系,dp[i][j]表示位置i的数比位置j的 ...

  6. Codeforces 1012C Hills【DP】*

    Codeforces 1012C Hills Welcome to Innopolis city. Throughout the whole year, Innopolis citizens suff ...

  7. 错误:Authentication with old password no longer supported, use 4.1 style passwords.

    今天重新装了系统,mysql connector 使用了官网的最新版本(6.8.3). 启动项目出现标题中的错误.原因大家谷歌. 解决方法,使用低版本的 connector. 我使用的是 6.5.6 ...

  8. C# 线程间不能调用剪切板的问题

    最近做一个项目,需要用到线程,而且要用到剪切板,创建了一个子线程之后发现在子线程中剪切板上获取不到数据,当时特别纳闷,上网查资料,最后终于搞定,现将解决方法归纳如下: 第一步: public void ...

  9. python自动发送邮件

    Python 的 smtplib 模块提供了发送电子邮件的功能.测试报告出来后,然后就把报告发送到邮箱. 一.先来看简单的列子 使用QQ邮箱发送邮件,使用的是授权码,需要先到QQ邮箱申请授权码. 邮箱 ...

  10. requireJS多页面应用实例

    本文是requireJS的一些知识点的总结,配上多页面应用中的实例分析. 本案例的目录结构如下: requireJS API的三个主要函数:define(创建模块),require(加载模块),con ...