四 spring管理bean的作用域
先看配置
<bean id="personservice" class="cn.itcast.service.impl.PersonServiceBean"></bean>
执行代码
ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
PersonService personservice1=(PersonService)ctx.getBean("personservice");
PersonService personservice2=(PersonService)ctx.getBean("personservice");
logger.info( personservice1== personservice2);
输出为true
现在我们知道了吧!默认情况下,spring管理的bean的作用域是单实例的(singleton)
如果把配置文件修改成
<bean id="personservice" class="cn.itcast.service.impl.PersonServiceBean" scope="prototype"></bean>
输出就为false
通过scope就可以让其bean实例为多实例的
prototype在spring是什么意思
prototype 每次从容器获取bean都是新的对象。
现在我们可以进一步思考 这个实例是什么时候就被加载的呢 ?
我们可以在实现类中写一个默认的构造方法 并且在构造方法中输出一句话
修改下
package cn.itcast.service.impl;
import cn.itcast.service.PersonService;
public class PersonServiceBean implements PersonService {
public PersonServiceBean(){
System.out.println("我被实例化了");
}
public void save(){
System.out.println("我是save()方法");
}
}
执行代码
ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
输出:
我被实例化了
注意:在执行这代码之前必须让实现类交给spring管理的作用域范围为默认的,只有在单例(singleton)的情况下才会
实例化bean,在scope="prototype"的情况下将不会在初始化spring中实例化bean 这时候只有在调用的情况下才会实例化
这就说明了,这实例在初始化spring的时候就同时把实例也初始化了
可不可以让初始化在调用的时候加载实例呢?
当然可以
singleton
默认情况下的单例模式,每次调用getBean方法获取的都是同一个bean对象
默认情况喜爱会在容器启动时初始化bean,但我们可以指定Bean节点的lazy-init属性来延迟初始化bean,这时候,只有第一次获取bean才会初始化bean。
<bean id="xxx" class="xxx" lazy_init="true"/>
如果对所有bean都应用延迟初始化
<beans default-lazy-init="true"...>
prototype
每次从容器获取bean都是一个新的对象
request
session
global session
在bean实例初始化的时候,我们还可以进行初始化方法的配置
在配置文件中的bean节点加入init-method即可
执行
ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
就可以看到输出了
同时我们还可以在spring服务关闭的时候执行资源的释放
在bean节点中加入destroy-method即可
AbstractApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
ctx.close();
实现类
package cn.itcast.service.impl;
import cn.itcast.service.PersonService;
public class PersonServiceBean implements PersonService {
public PersonServiceBean(){
System.out.println("我被实例化了");
}
public void save(){
System.out.println("我是save()方法");
}
public void init(){
System.out.println("初始化方法进行中");
}
public void destroy(){
System.out.println("销毁的方法进行中");
}
}
配置文件
<bean id="personservice" class="cn.itcast.service.impl.PersonServiceBean" init-method="init" destroy-method="destroy"></bean>
end 完毕!
分享到:
相关推荐
Spring 的bean的作用域总结,详细的总结了 Spring 的bean的作用域
讲解了spring的6种作用域:singleton(单例)、non-singleton(也称 prototype),Spring2.0以后,增加了session、request、global session三种专用于Web应用程序上下文的Bean
spring bean 的作用域(scope), SPringle bean的作用域
Spring Bean 的作用域之间有什么区别:Bean的作用域: 可以通过scope 属性来指定bean的作用域 ①singleton: 默认值。当IOC容器
详解Spring中bean的作用域,一级对action的管理方式,方便对spring有一个深入的了解
NULL 博文链接:https://huangminwen.iteye.com/blog/1486717
JSP 中Spring Bean 的作用域详解 Bean元素有一个scope属性,用于定义Bean的作用域,该属性有如下五个值: 1>singleton: 单例模式,在整个spring IOC容器中,单例模式作用域的Bean都将只生成一个实例。一般Spring...
如果bean的作用域的属性被声明为 singleton, 那么Spring Ioc容器只会创建一个共享的bean实例。对于所有的bean请求,只要id与该bean定义的相匹配,那么Spring在每次需要时都返回同一个bean实例。 Singleton是单例...
01.Spring Bean的作用域代码
JSP 中Spring Bean 的作用域详解.docx
主要介绍了Spring实战之Bean的作用域request用法,结合实例形式分析了spring中Bean的request作用域相关使用技巧与操作注意事项,需要的朋友可以参考下
使用了ApplicationContextAware接口,获取spring管理的bean; 多项目整合夸spring容器获取bean的实现方式。
主要介绍了Spring实战之Bean的作用域singleton和prototype用法,结合实例形式分析了Bean的作用域singleton和prototype相关使用方法及操作注意事项,需要的朋友可以参考下
07_SSM面试题_Spring Bean的作用域之间有什么区别
主要介绍了SPRING FRAMEWORK BEAN作用域和生命周期原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要给大家介绍了Spring中Bean的生命周期和作用域及实现方式的相关资料,文中介绍的非常详细,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
主要介绍了浅谈Spring中Bean的作用域、生命周期,具有一定借鉴价值,需要的朋友可以参考下
* * * * Bean的作用域 作用域的种类 Spring 4.3中为Bean的实例定义了7种作用域,如下表所示: 注意:在上表7种作用域中,singleton和prototype是最常用的两种作用域。 在Spring配置文件中,可以使用<bean>元素的...
Spring容器中Bean的作用域编程开发技术共3页.pdf.zip
NULL 博文链接:https://moshow.iteye.com/blog/1607598