小程序容器助力企业在金融与物联网领域实现高效合规运营,带来的新机遇与挑战如何管理?
626
2023-02-10
详解SpringIOC容器中bean的作用范围和生命周期
beanBJXUGMmb的作用范围:
可以通过scope属性进行设置:
singleton 单例的(默认)
prototype 多例的
request 作用于web应用的请求范围
session 作用于web应用的会话范围
global-session 作用于集群环境的会话范围(全局会话范围)
测试:
@Test
public void test(){
//通过ClassPathXmlApplicationContext对象加载配置文件方式将javabean对象交给spring来管理
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("bean.xml");
//获取Spring容器中的bean对象,通过id和类字节码来获取
Human human = applicationContext.getBean("human", Human.class);
Human human1 = applicationContext.getBean("human", Human.class);
System.out.println(human==human1);
}
结果:
将scope属性http://设置为prototype时
结果:
singleton和prototype的区别
如果bean属性设置为singleton时,当我们加载配置文件时对象已经被初始化
而如果使用prototype时,对象的创建是我们什么时候获取bean时什么时候创建对象
当设置为prototype时
当设置为singleton时
bean对象的生命周期
单例对象:
出生:当容器创建时对象出生
活着:只有容器还在,对象一直活着
死亡:容器销户,对象死亡
单例对象和容器生命周期相同
测试:
先设置属性init-method和destroy-method,同时在person类中写入两个方法进行输出打印
public void init(){
System.out.println("初始化...");
}
public void destroy(){
System.out.println("销毁了...");
}
测试类:
@Test
public void test(){
//通过ClassPathXmlApplicationContext对象加载配置文件方式将javabean对象交给spring来管理
ClassPathXmlApplicationContext Context=new ClassPathXmlApplicationContext("bean.xml");
// //获取Spring容器中的bean对象,通过id和类字节码来获取
Person person = Context.getBean("person", Person.class);
//销毁容器
Context.close();
}
结果:
总结:单例对象和容器生命周期相同
当属性改为prototype多例时
出生:当我们使用对象时spring框架为我们创建
活着:对象只要是在使用过程中就一直活着
死亡:当对象长时间不用,且没有别的对象应用时,由java垃圾回收器回收对象
测试类:
@Test
public void test(){
//通过ClassPathXmlApplicationContext对象加载配置文件方式将javabean对象交给spring来管理
ClassPathXmlApplicationContext Context=new ClassPathXmlApplicationContext("bean.xml");
// //获取Spring容器中的bean对象,通过id和类字节码来获取
Person person = Context.getBean("person", Person.class);
//销毁容器
Context.close();
}
结果:
总结:由于Spring容器不知道多例对象什么时候使用,什么时候能用完,只有我们自己知道,因此它不会轻易的把对象销毁,它会通过java垃圾回收器回收对象
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~