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("鸭在水上漂");
}
}
我们可以新建一个子配置文件然后再加入到主配置文件中
<?xml version="1.0" encoding="UTF-8"?>
<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">
<!--
lazy-init:告诉spring容器是否以懒加载的方式创建对象
取值有三个:true、false、default
true/default:以懒加载的方式创建对象,当真正使用对象的时候才创建对象
false:非懒加载,容器启动立刻创建对象
懒加载与非懒加载的优缺点:
懒加载:对象使用的时候才去创建。节省资源,但不利于提前发现错误
非懒加载:容器启动时立马创建。消耗资源,有利于提前发现错误
-->
<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
结果为
Duck…诞生了
鸭在水上漂
单例(singleton)是非懒加载,多例(prototype)是懒加载
<!--
单例(singleton)是非懒加载,多例(prototype)是懒加载
-->
<bean id="bigDuck" class="cn.java.lazy4.Duck" scope="prototype"></bean>
结果是:
Duck…诞生了
鸭在水上漂
懒加载与非懒加载的优缺点:
懒加载:对象使用的时候才去创建。节省资源,但是不利于提前发现错误
非懒加载:容器启动时立马创建。消耗资源,有利于提前发现错误
错误非常关键,所以一般来说都用非懒加载的方式
初始化与销毁
初始化与销毁只能指定一个方法
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();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<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">
<!--
init-method:指定初始化方法,初始化方法是在构造方法执行之后执行
destory-method:销毁方法,在我们调用的方法之后执行(当对象被销毁的时候才执行)
值不用加()直接写方法名
-->
<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
鸡蛋羹