Spring的作用域和生命周期

目录

1.Bean的作用域

2.Bean的作用域的分类

3.设置作用域

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

5.Bean的生命周期


1.Bean的作用域

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

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

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

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

Spring的作用域和生命周期_第1张图片

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

Spring的作用域和生命周期_第2张图片

2.Bean的作用域的分类

官话:Spring的作用域和生命周期_第3张图片

bean的作用域默认是

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

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

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

限定SpringMVC中使用

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

Spring的作用域和生命周期_第4张图片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))

Spring的作用域和生命周期_第5张图片

Spring的作用域和生命周期_第6张图片

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 :卖房子

Spring的作用域和生命周期_第7张图片

Spring的作用域和生命周期_第8张图片

Spring的作用域和生命周期_第9张图片

Spring的作用域和生命周期_第10张图片

Spring的作用域和生命周期_第11张图片

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

此时C对象已经生成

然后执行

 此时B对象已经生成

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

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

你可能感兴趣的:(spring,java,后端)