Spring Framework中的Bean生命周期1

简介: Spring Framework中的Bean生命周期1

#我的编程语言学习笔记#

目录

一.Bean生命周期的简介

1.基本概念

2.Spring生命周期的几大阶段

3.注意点及小结

4.生活案例

5.Spring容器管理JavaBean的初始化过程

二. Bean的单例选择与多例选择

1.单例选择与多例选择的优缺点

1.1单例模式的优点:

1.2单例模式的缺点:

1.3多例模式的优点:

1.4多例模式的缺点:

1.5 小结

2.案例演示单例模式与多例模式

1.演示在单例模式和多例模式下资源变量是否被污染

2. 判断单例模式和多例模式的初始化

3.单例模式和多例模式的适用场景


一.Bean生命周期的简介

1.基本概念

Bean生命周期指的是Bean在容器中创建、初始化、使用和销毁的过程。Spring的IoC容器负责管理Bean的生命周期,确保它们按照预期的方式被创建和销毁

2.Spring生命周期的几大阶段

1.实例化:在容器启动时,Spring根据配置文件或注解等方式创建Bean的实例。这个阶段是通过调用Bean的构造函数完成的。

2.属性注入:在实例化后,Spring会通过各种方式(例如XML配置、注解、Java代码等)将Bean所需的属性值注入到Bean中。可以使用@Autowired和@Value等注解来实现依赖注入。

3.初始化回调方法:在Bean的所有属性被注入之后,Spring会调用Bean的初始化回调方法。常见的初始化回调方法是实现InitializingBean接口的afterPropertiesSet方法或使用@PostConstruct注解。

4.自定义初始化方法:除了使用初始化回调接口和注解外,开发人员还可以在Bean中定义自己的初始化方法。可以通过在Bean的方法上使用@Bean(initMethod = "customInit")注解来指定自定义的初始化方法。

5.使用Bean:在初始化后,Bean可以被容器和其他Bean使用。可以在其他Bean中使用依赖注入来获取到已经初始化的Bean。

6.销毁回调方法:当容器关闭时或者通过编程方式销毁Bean时,Spring会调用Bean的销毁回调方法。常见的销毁回调方法是实现DisposableBean接口的destroy方法或使用@PreDestroy注解。

7.自定义销毁方法:类似于初始化方法,开发人员可以在Bean中定义自己的销毁方法。可以通过在Bean的方法上使用@Bean(destroyMethod = "customDestroy")注解来指定自定义的销毁方法。

3.注意点及小结

当使用Java配置(如@Configuration)时,Bean的生命周期管理通常使用方法级别的@Bean注解,而不是XML配置中的<bean>元素。

总结起来,Spring Bean的生命周期包括实例化、属性注入、初始化回调方法、自定义初始化方法、使用Bean、销毁回调方法和自定义销毁方法。Spring提供了多种方式来管理Bean的生命周期,开发人员可以根据需要选择适合自己的方式

4.生活案例

假设我们以一个人的生命周期作为生活实例来比喻Spring Bean的生命周期。

1.实例化:当一个人出生时,就相当于Bean在容器中被实例化的过程。一个新生婴儿就是一个新的实例,具有独立的身份。

2.属性注入:随着时间的推移,这个人会经历各种学习和成长的过程,就像Bean在属性注入阶段接收到不同的属性值。例如,这个人会接受教育、学习技能、掌握知识,这些都是人生中注入的属性。

3.初始化回调方法:当这个人成年后,可能会选择一个职业或自己的事业,就像Bean在初始化回调方法阶段定义自己的职责和目标。这个人会明确自己的使命,并准备好开始工作。

4.自定义初始化方法:在人生的旅程中,这个人会发展自己的兴趣爱好、价值观和生活方式,就像Bean可以定义自己的初始化方法。这些方法可以帮助这个人构建自己的身份,并适应不同的环境。

5.使用:完成初始化后,这个人会活跃在社会中,与其他人交流、工作、合作,就像Bean在容器中被其他组件或应用程序使用。

6.销毁回调方法:当一个人的生命接近尾声或者出现一些变故时,他们开始为离开做准备。就像Bean的销毁回调方法一样,这个人可能会处理他们的后事,与亲人和朋友告别,做好最后的安排。

7.自定义销毁方法:在离开之前,这个人可以进行一些必要的准备,如写遗嘱、处理财务等,就像Bean可以定义自己的销毁方法来处理必要的清理工作。

通过这个比喻,我们可以将Spring Bean的生命周期与一个人的生命周期进行对比,从而更好地理解Bean在容器中的创建、初始化、使用和销毁的过程。

Bean的生命周期就像我们的一生,人的终点是死亡,Bean的生命周期也一样,终点都是一样的,重要的是过程,所以这里也希望大家能够热爱生活

5.Spring容器管理JavaBean的初始化过程

1.xml/annotation/configuation 配置Javabean

2.BeanDefinitionReader解析配置的JavaBean得到BeanDefinition,最终得到List<BeanDefinition>集合

3.触发BeanFactoryPostProcessor,在Javabean初始化之前执行自己的业务

4.spring中beanFactory,会通过List<BeanDefinition>集合遍历初始化所有的Javabean对象

5.如果自己的JavaBean需要调动Spring上下文中的资源,那么需要实现*aware感知接口

6.如果自己的JavaBean已经初始化好了,还需扩展功能,那么需要借助BeanPostProcessor来实现

目录
相关文章
|
11天前
|
缓存 Java Spring
实战指南:四种调整 Spring Bean 初始化顺序的方案
本文探讨了如何调整 Spring Boot 中 Bean 的初始化顺序,以满足业务需求。文章通过四种方案进行了详细分析: 1. **方案一 (@Order)**:通过 `@Order` 注解设置 Bean 的初始化顺序,但发现 `@PostConstruct` 会影响顺序。 2. **方案二 (SmartInitializingSingleton)**:在所有单例 Bean 初始化后执行额外的初始化工作,但无法精确控制特定 Bean 的顺序。 3. **方案三 (@DependsOn)**:通过 `@DependsOn` 注解指定 Bean 之间的依赖关系,成功实现顺序控制,但耦合性较高。
实战指南:四种调整 Spring Bean 初始化顺序的方案
|
1月前
|
XML Java 数据格式
Spring从入门到入土(bean的一些子标签及注解的使用)
本文详细介绍了Spring框架中Bean的创建和使用,包括使用XML配置文件中的标签和注解来创建和管理Bean,以及如何通过构造器、Setter方法和属性注入来配置Bean。
66 9
Spring从入门到入土(bean的一些子标签及注解的使用)
|
30天前
|
Java 测试技术 Windows
咦!Spring容器里为什么没有我需要的Bean?
【10月更文挑战第11天】项目经理给小菜分配了一个紧急需求,小菜迅速搭建了一个SpringBoot项目并完成了开发。然而,启动测试时发现接口404,原因是控制器包不在默认扫描路径下。通过配置`@ComponentScan`的`basePackages`字段,解决了问题。总结:`@SpringBootApplication`默认只扫描当前包下的组件,需要扫描其他包时需配置`@ComponentScan`。
|
1月前
|
Java 开发者 Spring
Spring bean的生命周期详解!
本文详细解析Spring Bean的生命周期及其核心概念,并深入源码分析。Spring Bean是Spring框架的核心,由容器管理其生命周期。从实例化到销毁,共经历十个阶段,包括属性赋值、接口回调、初始化及销毁等。通过剖析`BeanFactory`、`ApplicationContext`等关键接口与类,帮助你深入了解Spring Bean的管理机制。希望本文能助你更好地掌握Spring Bean生命周期。
73 1
|
1月前
|
Java Spring
获取spring工厂中bean对象的两种方式
获取spring工厂中bean对象的两种方式
38 1
|
1月前
|
Java 开发者 Spring
Spring bean的生命周期详解!
本文详细介绍了Spring框架中的核心概念——Spring Bean的生命周期,包括实例化、属性赋值、接口回调、初始化、使用及销毁等10个阶段,并深入剖析了相关源码,如`BeanFactory`、`DefaultListableBeanFactory`和`BeanPostProcessor`等关键类与接口。通过理解这些核心组件,读者可以更好地掌握Spring Bean的管理和控制机制。
84 1
|
2月前
|
XML Java 数据格式
spring复习03,注解配置管理bean
Spring框架中使用注解配置管理bean的方法,包括常用注解的标识组件、扫描组件、基于注解的自动装配以及使用注解后的注意事项,并提供了一个基于注解自动装配的完整示例。
spring复习03,注解配置管理bean
|
5月前
|
Java 开发者 Spring
解析Spring中Bean的生命周期
解析Spring中Bean的生命周期
55 2
|
5月前
|
XML druid Java
Spring5系列学习文章分享---第二篇(IOC的bean管理factory+Bean作用域与生命周期+自动装配+基于注解管理+外部属性管理之druid)
Spring5系列学习文章分享---第二篇(IOC的bean管理factory+Bean作用域与生命周期+自动装配+基于注解管理+外部属性管理之druid)
62 0
|
4月前
|
Java Spring 容器
Spring Boot 启动源码解析结合Spring Bean生命周期分析
Spring Boot 启动源码解析结合Spring Bean生命周期分析
103 11