容器中只存在一个共享的Bean,只要id与Bean定义相匹配,那就会是同一个Bean。在容器启动(实例化)时Bean就实例化和初始化(可以通过lazy-init="true"来设置使得Bean被调用时才初始化)。
对有状态的Bean建议使用Prototype,对无状态建议使用Singleton。
容器启动时并没有实例化Bean,只有获取Bean时才会被创建,并且每一次都是新建一个对象。
每个HTTP 都会有自己的Bean,当处理结束时,Bean销毁。
每一个Http session有自己的Bean
global session作用域类似于标准的HTTP Session作用域,不过仅仅在基于portlet的web应用中才有意义。Portlet规范定义了全局Session的概念,它被所有构成某个portlet web应用的各种不同的portlet所共享。在global session作用域中定义的bean被限定于全局portlet Session的生命周期范围内。
Bean在容器启动时就会实例化和初始化,但是可以通过Bean的设置来设置对象的初始化时机
第一种:通过设置<bean>
<bean id="ServiceImpl" class="cn.csdn.service.ServiceImpl" lazy-init="true"/>
第二种:通过设置<Beans>来修改所有bean默认方式的初始化时机
<beans default-lazy-init="true">
Spring读取xml文件的时候,并不会立刻创建对象,而是在第一次请求该bean时才初始化(如调用getBean方法时)。 容器只会实例化和初始化Bean,不会销毁Bean。清除prototype作用域的对象并释放任何prototype bean所持有的昂贵资源,都是客户端代码的职责。 在初始化后交由调用者管理
参考: https://blog.csdn.net/fuzhong...
这篇博客有更加详细介绍。
ps:由于本人学识有限,欢迎指出错误,相互交流学习。