• Rhythmk 一步一步学 JAVA (13) Spring-2 之Ben懒加载以及生命周期,单例


    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!

  • 相关阅读:
    IDEA新建项目时,没有Spring Initializr选项
    idea 不下载jar包
    eclipse安装activiti designer
    idea上activiti插件的安装及使用
    activiti实战--第二章--搭建Activiti开发环境及简单示例
    activiti实战--第一章--认识Activiti
    jdk1.8中的for循环
    [原][bigemap][globalmapper]通过bigemap下载全球30米DEM高程数据(手动下载)(下载全球高精度dom卫片、影像、等高线、矢量路网、POI、行政边界)
    [转]OpenStreetMap/Google/百度/Bing瓦片地图服务(TMS)
    [转]osgconv工具简介
  • 原文地址:https://www.cnblogs.com/rhythmK/p/3411409.html
Copyright © 2020-2023  润新知