• 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 通知");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    调用类:

    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();      
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

  • 相关阅读:
    LLM基础模型系列:Prompt-Tuning
    视频博主都在用的 音频素材网,免费还可商用
    04【保姆级】-GO语言指针
    基于javaweb音乐网站管理系统
    iOS开发 - 抛开表面看本质之iOS常用架构(MVC,MVP,MVVM)
    这次彻底搞定CSS层叠、优先级!
    运动无线蓝牙耳机哪个品牌好、蓝牙运动耳机排行榜10强
    [NLP] Llama2模型运行在Mac机器
    【无标题】初识TCP,实验加抓包带你理解为什么需要三次握手、四次挥手
    应用程序会不会导致linux系统崩溃死机?
  • 原文地址:https://blog.csdn.net/dddddrrrzz/article/details/125852507