Spring中懒加载与非懒加载和初始化与销毁

文章目录

  • spring中懒加载与非懒加载
    • 懒加载
    • 非懒加载
    • 单例(singleton)是非懒加载,多例(prototype)是懒加载
  • 初始化与销毁

spring中懒加载与非懒加载

懒加载

新建一个duck类

package cn.java.lazy4;
/**
 * @Title:  Duck.java
 * @Package cn.java.lazy4
 * @author: Matthew
 * @date: 2019年3月6日 下午7:37:06
 */

public class Duck {
	
	public Duck() {
		System.out.println("Duck.....诞生了");
	}
	
	public void behavior() {
		System.out.println("鸭在水上漂");
	}
}

我们可以新建一个子配置文件然后再加入到主配置文件中


<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

	
	<bean id="bigDuck" class="cn.java.lazy4.Duck" lazy-init="true">bean>         

beans>
<import resource="cn/java/lazy4/duck.xml"/>
package cn.java.lazy4;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Description:单例与多例
 * @Title:  Window.java
 * @Package cn.java.ioc1
 * @author: Matthew
 * @date: 2019年3月6日 下午6:01:58
 */

public class Window {

	public static void main(String[] args) {
//		YellowMouseWolf yellow = new YellowMouseWolf();
//		1.启动框架(context代表spring容器)
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		System.out.println("----------");
//		2.获取spring容器中创建的对象(通过id值获得)
		Duck duck1 = (Duck)context.getBean("bigDuck");
		duck1.behavior();
	}
}

结果为:


Duck…诞生了
鸭在水上漂
我们可以发现duck诞生在-----之后,也就是说它并没有在启动框架的时候同时声明对象,它是在使用的时候再声明对象的。

非懒加载

将代码改为false

Spring中懒加载与非懒加载和初始化与销毁_第1张图片
结果为
Duck…诞生了


鸭在水上漂

单例(singleton)是非懒加载,多例(prototype)是懒加载


	<bean id="bigDuck" class="cn.java.lazy4.Duck" scope="prototype">bean>

结果是:


Duck…诞生了
鸭在水上漂
Spring中懒加载与非懒加载和初始化与销毁_第2张图片
懒加载与非懒加载的优缺点:
懒加载:对象使用的时候才去创建。节省资源,但是不利于提前发现错误
非懒加载:容器启动时立马创建。消耗资源,有利于提前发现错误

错误非常关键,所以一般来说都用非懒加载的方式

初始化与销毁

初始化与销毁只能指定一个方法

package cn.java.initAndDestroy3;
/**
 * @Title:  Ji.java
 * @Package cn.java.initAndDestroy
 * @author: Matthew
 * @date: 2019年3月6日 下午7:05:26
 */

public class Ji {
	

	public Ji() {
		System.out.println("Ji....鸡蛋生了");
	}
	
	public void init(){
		System.out.println("Ji.....我是小鸡还没长大");
	}
	
	public void behavior() {
		System.out.println("鸡会打鸣");
	}
	
	public void destroy() {//销毁方法
		System.out.println("鸡蛋羹");
	}
}

package cn.java.initAndDestroy3;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Description:单例与多例
 * @Title:  Window.java
 * @Package cn.java.ioc1
 * @author: Matthew
 * @date: 2019年3月6日 下午6:01:58
 */

public class Window {

	public static void main(String[] args) {
//		YellowMouseWolf yellow = new YellowMouseWolf();
//		1.启动框架(context代表spring容器)
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//		2.获取spring容器中创建的对象(通过id值获得)
		Ji ji = (Ji)context.getBean("smallJi");
		ji.behavior();
//		3.关闭context容器,并且销毁容器中的所有对象
		((ClassPathXmlApplicationContext)context).close();
	}
}


<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
    
	
	
	<bean id="smallJi" class="cn.java.initAndDestroy3.Ji" init-method="init" destroy-method="destroy">bean>
beans>

结果是:
Ji…鸡蛋生了
Ji…我是小鸡还没长大
鸡会打鸣
三月 09, 2019 2:49:59 下午 org.springframework.context.support.AbstractApplicationContext doClose
信息: Closing org.springframework.context.support.ClassPathXmlApplicationContext@34c45dca: display name [org.springframework.context.support.ClassPathXmlApplicationContext@34c45dca]; startup date [Sat Mar 09 14:49:58 CST 2019]; root of context hierarchy
三月 09, 2019 2:49:59 下午 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons
信息: Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@606d8acf: defining beans [smallJi]; root of factory hierarchy
鸡蛋羹

Spring中懒加载与非懒加载和初始化与销毁_第3张图片
Spring中懒加载与非懒加载和初始化与销毁_第4张图片

你可能感兴趣的:(Spring4)