一、单例模式:在spring中其实是scope(作用范围)参数的缺省设定值
每个bean定义只生成一个对象实例,每次getBean请求获得的都是此实例
单例模式分为饿汉模式和懒汉模式;
饿汉模式
|
spring singleton的缺省是饿汉模式:启动容器时,为所有spring配置文件中定义的bean都生成一个实例(且是线程安全) |
懒汉模式 |
在第一个请求时才生成一个实例,以后的请求都调用这个实例
|
关于单例的饿汉,懒汉请参考:http://zliguo.iteye.com/blog/2258879
二、默认情况下为单例模式(饿汉),prototype多实例模式介绍
调用getBean时,就new一个新实例
默认单例(饿汉):
xml配置文件:
|
测试代码:
|
运行:
|
prototype多实例模式介绍:
<bean id="testDAO" class="com.test.task.impl.TestDAOImpl" scope="prototype" />
|
执行同样的测试代码 |
运行:
|
另有:request,session,globalSession
request:
<bean id="loginAction" class="com.foo.LoginAction" scope="request"/>
Spring容器创建一个新的实例,利用LoginAction,LoginAction bean
bean定义为每一个HTTP请求。也就是说,loginAction bean是作用域
HTTP请求的水平。你可以改变内部状态的实例创建尽可能多的你
想要的,因为其他实例创建的同一个loginAction不会看到这些bean定义
变化状态;他们特定的单个请求。当请求处理完成,作用域的bean的请求就会被丢弃。
session:
<bean id="userPreferences" class="com.foo.UserPreferences" scope="session"/>
Spring容器创建一个新的UserPreferences bean使用的实例
userPreferences bean定义为一个HTTP会话的生命周期。换句话说,
userPreferences bean有效范围在HTTP会话级别。在请求范围内
Bean,你可以改变内部状态的实例创建尽可能多的你想要的,
知道其他HTTP会话实例也使用相同的实例创建
userPreferences bean定义看不到这些变化状态,因为他们是特别的一个
单独的HTTP会话。HTTP会话最终丢弃时,作用域的bean特定的HTTP会话也丢弃。
globalSession:
<bean id="userPreferences" class="com.foo.UserPreferences" scope="globalSession"/>
全球会话范围类似于标准的HTTP会话范围(如上所述)
只适用于基于portlet的web应用程序的上下文中。portlet规范定义了这个概念
全球会话之间共享的所有portlet组成一个portlet的web应用程序。
Bean在全球会话范围定义的作用域的生命周期(或约束)全球portlet会话。
如果你写一个标准的基于servlet的web应用程序定义一个或多个bean
全球会话范围,使用标准的HTTP会话范围,没有错误。
相关推荐
Spring Bean创建初始化流程
本篇文章主要介绍了Spring 中如何控制2个bean中的初始化顺序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
初始化后可访问Spring管理的Bean
3、通过spring的xml bean配置或bean注解指定初始化方法,如下面实例的initMethod方法通过@bean注解指定。 销毁的时候实现的方法 1、通过java提供的@PreDestroy注释; 2、通过实现spring提供的DisposableBean接口,并...
下面小编就为大家带来一篇浅谈spring容器中bean的初始化。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
spring的初始化,可以让初学者了解soring的开发过程,让开发轻松进入开发大门。
主要介绍了Spring Bean的初始化和销毁,结合实例形式详细分析了Spring Bean的初始化和销毁相关配置、使用方法及操作注意事项,需要的朋友可以参考下
Spring bean 一般通过配置文件和注解进行加载,如果要实现jar或class...测试示例中是spring boot 的部分代码,动态加载的内容为接口实现类,且初始化时加载本地的实现类,动态加载后改为非程序加载目录中的jar实现类。
NULL 博文链接:https://bijian1013.iteye.com/blog/2374256
Spring 源码分析(Bean的初始化) 前言 本篇文章是个人第一次看spring源码并总结,同时也参考了下面这篇博客。基本也是按照他的思路来理解的。这也算是第一版个人简易理解。也算是窥见spring的冰山一角,之后也会...
Spring源码学习六:bean初始化1
Spring 延迟实例化
本篇将对定义在 XMl 文件中的 bean,从静态的的定义到变成可以使用的对象的过程,即 bean 的加载和获取的过程进行一个整体的了解
附件是在Spring Boot项目中使用CommandLineRunner接口来执行一些资源初始化的演示,该文档也详细的介绍了在@Component注解的类中可以注入@Controller,并把获取的数据存放到其他Bean类中的私有静态变量,算是对自己...
只需要把需要注册进容器的bean声明为@Component即可,spring会自动扫描到这个Bean完成初始化并加载到spring上下文容器。 而当你在项目启动时需要提前做一个业务的初始化工作时,或者你正在开发某个中间件需要完成...
主要介绍了Spring Bean初始化及销毁多种实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
Spring IOC容器可以管理Bean的生命周期,允许在Bean生命周期的特定点执行定制的任务。 Spring IOC容器对Bean的生命周期...在 Bean 的声明里设置 init-method 和 destroy-method 属性, 为 Bean 指定初始化和销毁方法。
Bean的之前初始化 19 Bean的准备就绪(Ready)状态 21 Bean的销毁 21 ApplicationContext 21 Spring的AOP框架 21 Spring的数据层访问 22 Spring的声明式事务 22 Spring对其它企业应用支持 22 注:后面的...
spring核心:iOC Aop IOC:inverson of control(控制反转): 就是对对象控制权的转移,从程序代码本身反转到 外部容器中,通过外部容器实现对象的创建,属性 ...创建spring的配置文件,编写bean 4.在测试类中测试