Spring学习记录 ---Bean的作用域和生命周期

Bean的作用域

在spring中,使用在bean标签使用的是scope属性设置的bean的作用域,确定bean是单个实例还是多实例的。

在默认的情况下,spring在每个IOC容器里面声明的的bean创建一个唯一的实例,整个IOC容器范围内的都能够共享该实例的,所有的后续的getBean()调用和bean引用的都将会返回这个唯一的bean实例。singleton,是所有bean的默认作用域。在此作用域下,spring能够精准的知道bean什么时候创建什么时候完成什么时候销毁

当bean的作用域为单例时,Spring会在IOC容器对象创建时就创建bean的对象实例。而当bean的作用域为prototype时,IOC容器在获取bean的实例时创建bean的实例对象,而且每调用一次getBean()就创建一个实例。每次通过Spring容器获取prototype定义的bean时,容器都将创建一个新的Bean实例,每个Bean实例都有自己的属性和状态。当容器创建了bean的实例后,bean的实例就交给了客户端的代码管理,Spring容器将不再跟踪其生命周期,并且不会管理那些被配置成prototype作用域的bean的生命周期。

类别

说明

singleton

在Spring的IOC容器中仅存在一个Bean实例

prototype

每次调用getBean方法都返回一个新的Bean实例

request

每次HTTP请求都会创建一个新的Bean实例,该作用域仅适用于WebApplicationContext环境

bean只是在当前的Request内有效

session

同一个Session会话共享一个Bean实例,该作用域仅适用于WebApplicationContext环境

bean实例只是在当前的session内有效的。

 Bean的生命周期

spring IOC容器可以管理bean生命周期,spring允许在bean生命周期内特定的时间点进行执行指定的任务。

spring的IOC容器对bean的生命周期进行管理的过程

        1、通过构造方法或者是setter的方式创建javabean实例

        2、为bean的属性设置值和其他的bean的引用,判断当前 bean的作用域是否为单例,若是,在在对应的缓存中查找,没有查找到的话则新建实例保存。如果不是单例,直接的创建新的实例

        3、新建实例后再将注入属性(populateBean),并处理回调创建bean找到@Autowired的对象
    创建注入对象,并赋值

在配置bean的时候,可以通过init-method和destory-method属性bean指定初始化和销毁的方法。

IOC的大致流程如下:

大致流程
    1.首先根据配置文件找到对应的包,读取包中的类,,找到所有含有@bean,@service等注解的类,利用反射解析它们,包括解析构造器,方法,属性等等,然后封装成各种信息类放到container(其实是一个map)里(ioc容器初始化)
    2.获取类时,首先从container中查找是否有这个类,如果没有,则报错,如果有,则通过构造器信息将这个类new出来
    3.如果这个类含有其他需要注入的属性,则进行依赖注入,如果有则还是从container找对应的解析类,new出对象,并通过之前解析出来的信息类找到setter方法(setter方法注入),然后用该方法注入对象(这就是依赖注入)。如果其中有一个类container里没找到,则抛出异常
    4.如果有嵌套bean的情况,则通过递归解析
    5.如果bean的scope是singleton,则会重用这个bean不再重新创建,将这个bean放到一个map里,每次用都先从这个map里面找。如果scope是session,则该bean会放到session里面。
    总结:通过解析 xml 文件,获取到bean的属性(id,name,class,scope,属性等等)里面的内容,利用反射原理创建配置文件里类的实例对象,存入到 Spring 的 bean 容器中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值