目录
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的初始化。
也就是如果一直依赖下去的话都会执行一半的属性注入,然后下潜知道最后一个依赖对象构造完毕,然后再一级一级返回。类似于递归