Java框架 Spring (二)启加载VS懒加载VS非单例

5 篇文章 0 订阅

前言

前面的案例都是启加载方式,启动Spring容器时创建对象,所以是饿汉式的单例模式,接下来我们通过修改bean的属性来修改为懒加载,非单例,并比较他们的初始化以及销毁时机。

看过西游记的都知道,最懒得是猪八戒,那么我们就用猪八戒这个对象作为懒加载来做实验,现在,创建孙悟空,猪八戒,猴毛对象

创建孙悟空,猪八戒对象,以及测试方法

//孙悟空类
public class MonkeyKing {
	public MonkeyKing() {
		System.out.println("---------------孙悟空创建-------------");
	}
	public void speak() {
		System.out.println("我要这铁棒有何用");
	}
	public void init() {
		System.out.println("---*** 初始化孙悟空 ***----");
	}
	public void destroy() {
		System.out.println("---*** 销毁孙悟空 ***----");
	}
}

//猪八戒类
public class PigEight {
	public PigEight() {
		System.out.println("---------------猪八戒创建-------------");
	}
	public void speak() {
		System.out.println("大师兄,师傅被妖怪抓走了");
	}
	
	public void init() {
		System.out.println("---*** 初始化猪八戒 ***----");
	}
	public void destroy() {
		System.out.println("---*** 销毁猪八戒  ***----");
	}
}

//测试
@Test
void test05() {
	ApplicationContext appc = new ClassPathXmlApplicationContext(XML);
	MonkeyKing sun1 = (MonkeyKing) appc.getBean("id_monkey");
	System.out.print(sun1+":");
	sun1.speak();
	MonkeyKing sun2 = (MonkeyKing) appc.getBean("id_monkey");
	System.out.print(sun2+":");
	sun2.speak();
	PigEight z8j = (PigEight) appc.getBean("id_pig");
	System.out.print(z8j+":");
	z8j.speak();
	
	//关闭资源时销毁
	((ClassPathXmlApplicationContext)appc).close();
	
}

启加载

<!-- 默认为单例,启加载 -->
<bean id="id_monkey" class="club.laobainb1314.p04.MonkeyKing"  />
<bean id="id_pig" class="club.laobainb1314.p04.PigEight" />

懒加载(lazy-init="true")

<bean id="id_monkey" class="club.laobainb1314.p04.MonkeyKing"  />
<!-- 给猪八戒加上懒加载 -->
<bean id="id_pig" class="club.laobainb1314.p04.PigEight" lazy-init="true"/>

 

非单例(scope="prototype")

<!-- 孙悟空添加scope="prototype"转为非单例 -->
<bean id="id_monkey" class="club.laobainb1314.p04.MonkeyKing" scope="prototype" />
<bean id="id_pig" class="club.laobainb1314.p04.PigEight" lazy-init="true"/>

总结

 默认,启动Spring容器时,创建对象,这样做的好处是一旦类有错误,容器启动即可发现。Spring容器中的对象,默认单例(scope="singleton"),可以减轻JVM管理对象的负担,设置scope="prototype",改为多实例,此时自动变为懒加载。

原型必懒,原型不销

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值