Bean作用域和生命周期

一、Bean作用域定义

限定程序中变量的可用范围叫做作用域,或者说在源代码中定义变量的某个区域就叫做作用域。
Bean的作用域是指Bean在 Spring 整个框架中的某种行为模式,比效 singleton单例作用域,就表示Bean 在整个Spring 中只有一份,它是全局共享的,那么当其他人修改了这个值之后,另一个人读取到的就是被修改的值。

1.1 Bean的作用域类型

Spring容器在初始化一个Bean的实例时,同时会指定该实例的作用域。Spring有6种作用域,最后四种是基于Spring MVC生效的:

  1. singleton:单例作用域(默认)
  2. prototype:原型作用域(多例作用域)
  3. request:请求作用域(Spring MVC)
  4. session:会话作用域(Spring MVC)
  5. application:全局作用域(Spring MVC)
  6. websocket: HTTP WebSocket 作用域(Spring WebSocket)

单例作用域和全局作用域的区别
singletonSpring Core的作用域;applicationSpring Web中的作用域; singleton 作用于loC的容器,而application 作用于Servlet容器。

1.2 Bean执行流程(Spring执行流程)

启动Spring容器->实例化Bean(分配内存空间,从无到有)->Bean注册到 Spring 中(存操作)->将Bean 装配到需要的类中(取操作)。

二、Bean生命周期

所谓的生命周期指的是一个对象从诞生到销毁的整个生命过程,我们把这个过程就叫做一个对象的生命周期。

Bean的生命周期分为以下5大部分:

  1. 实例化Bean(为Bean分配内存空间)
  2. 设置属性(Bean 注入和装配)
  3. Bean初始化
    a) 执行各种通知(执行各种 Aware) ;如 BeanNameAwareBeanFactoryAware
    ApplicationContextAware 的接口方法。
    b) 执行初始化的前置方法;
    c) 执行构造方法,两种执行方式,一种是执行@PostConstruct,另一种实质性 init-method
    d) 执行初始化的后置方法;
  4. 使用Bean
  5. 销毁Bean
    销毁容器的各种方法:
    a) @PreDestroy
    b) 重写DisposableBean接口方法
    c) destroy-method
import org.springframework.beans.factory.BeanNameAware;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

//@Component
public class BeanLifeComponent implements BeanNameAware {

    @PostConstruct
    public void postConstruct() {
        System.out.println("执行 @PostConstruct");
    }

    public void init() {
        System.out.println("执行 init-method");
    }

    public void use() {
        System.out.println("使用 bean");
    }


    @PreDestroy
    public void preDestroy() {
        System.out.println("执行了 @PreDestroy");
    }

    public void setBeanName(String s) {
        System.out.println("执行了 Aware 通知");
    }
}

调用类:

public class App3 {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext context =
                new ClassPathXmlApplicationContext("spring-config.xml");
       BeanLifeComponent beanLifeComponent = context.getBean("beanLifeComponent", BeanLifeComponent.class);
       beanLifeComponent.use();
       context.destroy();      
    }
}

在这里插入图片描述

Spring Bean作用域生命周期Spring 框架中非常重要的两个概念,这里简单介绍一下。 1. Bean作用域Spring 中,Bean作用域指的是 Bean 实例的创建销毁的范围。Spring 提供了以下五种作用域: - singleton:单例模式,容器中只有一个 Bean 实例,所有对 Bean 的请求都将返回同一个实例。 - prototype:每次请求都会创建一个新的 Bean 实例。 - request:每个 HTTP 请求都会创建一个新的 Bean 实例。 - session:每个 HTTP Session 都会创建一个新的 Bean 实例。 - global session:基于 Servlet 3.0+ 的环境下,每个全局的 HTTP Session 都会创建一个新的 Bean 实例。 2. Bean生命周期 Bean生命周期指的是 Bean 实例从创建到销毁的整个过程。Spring 提供了以下七个阶段: - 实例化 BeanSpring 根据 Bean 的定义创建一个 Bean 的实例。 - 设置 Bean 属性:Spring 将配置文件中的属性设置到 Bean 实例中。 - BeanNameAware:如果 Bean 实现了 BeanNameAware 接口,SpringBean 的 ID 传递给 setBeanName 方法。 - BeanFactoryAware:如果 Bean 实现了 BeanFactoryAware 接口,SpringBeanFactory 实例传递给 setBeanFactory 方法。 - InitializingBean:如果 Bean 实现了 InitializingBean 接口,Spring 将调用 afterPropertiesSet 方法。 - 自定义初始化方法:Bean 可以配置自定义的初始化方法。 - DisposableBean:如果 Bean 实现了 DisposableBean 接口,Spring 将调用 destroy 方法。 - 自定义销毁方法:Bean 可以配置自定义的销毁方法。 以上就是 Spring Bean作用域生命周期的简单介绍。理解 Bean作用域生命周期对于正确使用 Spring 框架非常重要。
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值