《读spring源码》19 Bean的生命周期总结(未完)

1、什么是springbean的生命周期

springbean的生命周期,简单来说,就是springbean在spring容器中实例化的时机,以及springbean的实例化过程中的一些行为。
springbean的实例化时机,根很多原因有关,其中一个就是springbean的作用域。在spring中的bean默认是单例的,那么bean还有什么类型的作用域呢?

2、springbean的作用域 @Scope("")
那么我们先来看一下scope注解的类结构
在这里插入图片描述
在这里插入图片描述
从scope的注解的注释中我们可以看到其实scopeName有四种
在这里插入图片描述
–>Singleton,单例,是Spring默认的,在整个容器中创建唯一的一个Bean实例,多用于无状态Bean,平时开发应用最普遍。(1)

–>Prototype,针对每个context.getBean()的请求,容器都会创建一个单独的Bean。(多例),值得注意的是,在使用AutoWired等依靠注解注入的场景,Spring为没一个依赖方注入一个新的Bean,当注入以后,使用方依赖的这个Bean的实例也就不会变了。如果在运行时想注入新的PrototypeBean,需要使用getBean()函数获取,官方文档称之为Method Injection。(2)

配置方式

    @Scope("prototype")

如果是在Web环境(SpringMVC),Spring中又有如下作用域:
在这里插入图片描述
Request,为每一个Http请求创建一个单独的Bean实例。(3)

Sesssion,在一个HTTP Session范围内共享一个Bean实例。(4)

Application,Spring为整个web上下文创建一个AppPreferences 的bean。也就是说,这个bean作用域是在ServletContext级别,它是作为ServletContext的一个属性存在的。(5)

以上三种SpringBean作用域。使用注解方式,配置方式如下,三个属性分别对应了三个Scope注解。
在这里插入图片描述
3、spring的加载时机

默认的单例SpringBean,在IOC容器初始化时就会被加载。但Spring有一个懒加载机制,当一个Bean配置了懒加载,当且仅当该Bean被第一次使用时才会触发加载。
配置懒加载的方式如下:

package com.enjoy.cap4;


import com.enjoy.cap1.Person;
import org.springframework.context.annotation.*;

@Configuration

public class MainConfig {
    /**
     * 针对于单实例bean :默认在容器中启动的时候创建对象
     * 懒加载:容器启动的时候 不创建对象 ,仅当第一次使用(获取)bean的时候才创建被初始化
     * @return
     */
    @Lazy
    @Bean
    public Person person(){
        System.out.println("给我们的容器中添加person");
        return new Person("张三",22);
    }
}

4、Springbean的生命周期

发布了434 篇原创文章 · 获赞 58 · 访问量 31万+

猜你喜欢

转载自blog.csdn.net/ppwwp/article/details/103339632
今日推荐