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!

原文地址:https://www.cnblogs.com/rhythmK/p/3411409.html