• Spring的作用域和生命周期


    目录

    1.Bean的作用域

    2.Bean的作用域的分类

    3.设置作用域

    4.Spring的执行流程(生命周期)

    5.Bean的生命周期


    1.Bean的作用域

    lombok (dependency依赖) 是为了解决代码的冗余(比如说get和set方法)那些构造类所必要的方法

    是为了更简单的替代java中必要代码的工具

    2022以后的IDEA不需要添加lombok插件

    @Date是个复合注解 就是@Setter和@Getter和@toString等等

    Bean的作用域:bean在整个Spring当中是单例模式,

    2.Bean的作用域的分类

    官话:

    bean的作用域默认是

    1.Singleton单例模式(单例模式又分为饿汉和懒汉)因为单例模式性能最优所以Spring默认选择它

    2.prototype 原型模式(多例模式)   每次取的都是类的原生的模式(类似于深克隆

    3.request 请求作用域,类似与pototype的每次请求都会根据原型深拷贝一个实例,区别是它部分共享一个Bean(在一个Http请求和响应中共享一个bean)

    限定SpringMVC中使用

    4.session 作用域 :一次会话中共享一个bean对象。 同样只适用于SpringMVC

    application 应用在SpringMVC里面 singsleton应用在Spring core里面,二者都是单例模式

    application 归属于  ApplicationContext          singsleton 归属于IOC容器

    3.设置作用域

    用@Scope("prototype")

    在@Bean上面设置,在注入Bean的时候设置

    加了之后的影响是:每次去拿存入Spring中的对象的时候,不管中途有没有被修改,它拿到的是原来的那份。(实际上就算是修改也是修改的原来的拷贝)也就是变成了多例模式

    4.Spring的执行流程(生命周期)

    1.启动容器(加载xml配置)

    2.加载bean对象(Bean对象的初始化)   加载bean标签/base-package加载扫描路径

    3.根据注解(@Controller等)注册Bean到Spring容器中

    4.装配Bean的属性(从Spring中取出Bean 放入属性 (private Stu stu))

    5.Bean的生命周期

    1.实例化Bean,这时候只是分配了内存,得到了毛坯房

    2.属性赋值: 属性注入,setter注入   构造方法注入          ex:买了装修的材料,引用外部资源

    3.Bean初始化                                                                  ex:装修

            a)实现了各种Aware通知的方法                               ex:各种通知,通知师傅

            b) 执行 BeanPostProcessor 初始化前置方法          ex :师傅们到场,勘察环境指定方

            c1)执行  @PostConstruct初始化方法

            c2)执行  xml里面的init-method方法                           ex :正式装修,先让使用科技的自动化注解师傅装修,再让传统的进行装修     

            

            d)执行 BeanPostProcessor 初始化后置方法           ex :打扫垃圾(木屑 油漆)等等

    4.使用Bean                                                                      ex:住房子

    5.销毁Bean                                                                      ex :卖房子

     属性注入是在初始化前面的,这个题目中A依赖于B,B依赖于C。如果从Spring中想要获取到A的对象,那么先执行A的属性注入,从代码中可以看到A需要B的属性注入,B又需要C的属性注入,C没有属性注入,然后执行C的初始化,打印了

    此时C对象已经生成

    然后执行

     此时B对象已经生成

    然后回到第一个完成A的初始化。

    也就是如果一直依赖下去的话都会执行一半的属性注入,然后下潜知道最后一个依赖对象构造完毕,然后再一级一级返回。类似于递归

  • 相关阅读:
    c++基础(十七)——职工管理系统实现
    Python:实现chaos machine混沌机算法(附完整源码)
    Python综合案例(动态柱状图)
    Lindorm-Operator云原生实践
    Python——LeetCode刷题——【53. 最大子数组和】
    excel表格在线编辑(开源版)
    80C51单片机指令寻址方式
    springboot配置多个数据源
    Promise 重写 (第一部分)
    代码随想录训练营第37天|LeetCode 738.单调递增的数字、714. 买卖股票的最佳时机含手续费、 968.监控二叉树
  • 原文地址:https://blog.csdn.net/weixin_66130235/article/details/130889698