概要
Spring Bean的生命周期
整体架构流程
SpringBean的生命周期可以概括为以下四个阶段:
1. 实例化:创建一个Bean对象。
2. 填充属性:为属性赋值。
3. 初始化:如果实现了xxxAware接口,通过不同类型的Aware接口拿到Spring容器的资源;如果实现了BeanPostProcessor接口,则会回调该接口的postProcessBeforeInitialization和postProcessAfterInitialization方法;如果配置了init-method方法,则会执行init-method配置的方法;如果Bean实现了DisposableBean接口,则会回调该接口的destroy方法;如果配置了destroy-method方法,则会执行destroy-method配置的方法。
4. 销毁:SpringBean的生命周期结束。
技术名词解释
Spring框架中的Bean的生命周期是一个复杂的过程,涉及到多个阶段和回调方法。以下是对Spring Bean生命周期的总结:
实例化Bean:Spring容器通过工厂模式实例化Bean。常见的实例化方式包括使用无参数构造函数、使用工厂方法等。
依赖注入:容器自动将所需的Bean注入到其他Bean中。依赖注入的方式包括构造函数注入、Setter方法注入和字段注入等。
属性设置:容器根据配置或注解自动设置Bean的属性值。
初始化方法调用:容器在属性设置完成后调用初始化方法,如通过init-method属性或@PostConstruct注解指定的方法,或者实现InitializingBean接口的方法。
Bean作用域管理:Spring提供了多种Bean的作用域,如单例、原型、请求、会话等。不同作用域的Bean具有不同的生命周期和范围。
依赖解析与装配:容器解析Bean之间的依赖关系,并自动装配相应的Bean。
容器事件监听:通过实现事件监听机制,可以在Bean的生命周期的不同阶段触发事件。
AOP代理:在某些情况下,Spring会为Bean创建一个AOP代理,以便在调用方法前后插入额外的逻辑。
Profile功能:通过使用不同的Profile,可以在运行时选择性地加载特定的Bean定义或配置。
容器关闭与销毁:当Spring容器关闭时,会触发相应的销毁方法(如果定义了的话),并执行清理操作。此外,容器会调用所有单例Bean的DisposableBean接口的destroy()方法来执行清理操作。
通过了解Spring Bean的生命周期,开发人员可以更好地控制Bean的行为,并在需要时执行自定义逻辑。
技术细节
Spring框架中的Bean的生命周期是一个复杂的过程,它涉及到许多不同的阶段。下面我会尽可能详细地描述Spring Bean的生命周期:
实例化Bean:
当Spring容器启动时,它会根据配置文件(如XML或JavaConfig)或注解来创建Bean实例。
对于单例(Singleton)类型的Bean,Spring只会创建一次Bean实例。
对于原型(Prototype)类型的Bean,每次请求都会创建一个新的Bean实例。
设置Bean属性:
在Bean实例化后,Spring会根据配置或注解来设置Bean的属性。
可以通过@Value、@Autowired、@Resource等注解或XML配置来自动装配属性。
Bean初始化方法:
Spring容器提供了两种类型的初始化方法:init-method在XML配置中指定,或者使用@PostConstruct注解在Java中指定。
当Bean的所有属性都设置完毕后,Spring会调用这些初始化方法。
Bean销毁方法:
与初始化方法类似,Spring也提供了两种类型的销毁方法:destroy-method在XML配置中指定,或者使用@PreDestroy注解在Java中指定。
当容器关闭或Bean不再需要时,这些销毁方法会被调用。
Bean的作用域:
Spring提供了多种Bean的作用域,如单例(Singleton)、原型(Prototype)、请求(Request)、会话(Session)等。
不同作用域的Bean的生命周期和范围是不同的。例如,单例Bean在整个应用中只有一个实例,而原型Bean每次请求都会创建一个新的实例。
依赖注入:
Spring通过依赖注入机制自动将所需的Bean注入到其他Bean中。
可以通过构造函数注入、Setter方法注入或字段注入等方式实现依赖注入。
Bean的配置:
Bean的配置可以通过XML配置文件、JavaConfig类或注解方式进行。
配置内容包括Bean的名称、作用域、依赖关系、生命周期回调等。
依赖解析:
Spring容器在启动时会解析Bean之间的依赖关系,并自动装配相应的Bean。
依赖解析是基于类型和名称的,Spring会根据配置和自动装配规则来确定如何装配Bean。
容器事件监听:
Spring容器提供了事件监听机制,可以在Bean的生命周期的不同阶段触发事件。
可以通过实现相应的接口或使用注解来监听容器事件。
容器关闭:
当Spring容器关闭时,它会触发相应的销毁方法,并执行清理操作。
对于有销毁方法的Bean,Spring会调用这些方法;对于没有销毁方法的Bean,Spring会按照默认的清理策略进行处理。
AOP代理:
在某些情况下,Spring会为Bean创建一个AOP代理,以便在调用方法前后插入额外的逻辑。
AOP代理可以用于实现诸如事务管理、安全控制等功能。
Profile功能:
通过使用不同的Profile,可以在运行时选择性地加载特定的Bean定义或配置。
这有助于实现不同环境下的配置切换,例如开发、测试和生产环境。
Spring Bean的生命周期是一个复杂的过程,涉及许多细节和方面。以下是一些额外的详细信息,以帮助您更全面地理解Spring Bean的生命周期:
实例化Bean:
Spring容器使用工厂模式来实例化Bean。通常,这是通过无参数的构造函数完成的,但也可以通过其他方式,如使用@Bean注解或实现InitializingBean和DisposableBean接口来指定初始化方法和销毁方法。
依赖解析:
Spring容器解析Bean之间的依赖关系,并使用自动装配机制(如@Autowired、@Resource等)将所需的Bean注入到相应的Bean中。
容器还支持通过名称、类型、名称和类型组合的自动装配。
Bean的作用域:
Spring提供了多种Bean的作用域,如单例(Singleton)、原型(Prototype)、请求(Request)、会话(Session)等。
单例Bean在整个应用中只有一个实例;原型Bean每次请求都会创建一个新的实例。其他作用域还包括会话(Session)和请求(Request)。
初始化方法:
除了通过init-method属性或@PostConstruct注解指定的初始化方法外,还可以实现InitializingBean接口或标记一个方法为@PostConstruct,该方法会在所有属性设置后被自动调用。
Bean的配置:
Bean的配置可以通过XML配置文件、JavaConfig类或注解方式进行。注解方式已成为Spring 4.0及更高版本的推荐配置方式。
配置内容包括Bean的名称、依赖关系、生命周期回调等。此外,还可以使用@Bean注解在Java类中定义Bean。
容器事件监听:
Spring容器提供了事件监听机制,允许在Bean的生命周期的不同阶段触发事件。例如,可以在初始化或销毁方法中发布事件。
AOP代理:
AOP允许开发者定义横切关注点,这些关注点可以在方法的调用之前、之后或抛出异常时执行特定的代码。Spring AOP使用代理模式,可以为Bean创建一个AOP代理,以便在调用方法前后插入额外的逻辑。
Profile功能:
通过使用Spring的Profile功能,可以在运行时选择性地加载特定的Bean定义或配置。这使得在不同的环境(如开发、测试和生产)下轻松切换配置成为可能。
容器关闭:
当Spring容器关闭时,它会触发相应的销毁方法(如果定义了的话),并执行清理操作。此外,容器会通过调用所有单例Bean的DisposableBean接口的destroy()方法来执行清理操作。
缓存:
对于单例Bean,Spring会在启动时解析并缓存Bean的定义和依赖关系。这有助于提高性能,因为一旦容器启动,查找和实例化Bean的时间就会大大减少。
自定义生命周期回调:
除了标准的生命周期回调(如初始化方法和销毁方法),开发者还可以自定义生命周期回调方法,并在这些方法中执行自定义逻辑。例如,可以定义一个方法来在Bean创建后立即执行某些操作。
线程安全:
Spring框架确保了单例Bean的线程安全,特别是当多个线程访问同一个单例Bean时。为了实现这一点,Spring会使用同步机制来保护共享的单例Bean实例。
小结
SpringBean的生命周期可以概括为以下四个阶段:
1. 实例化:创建一个Bean对象。
2. 填充属性:为属性赋值。
3. 初始化:如果实现了xxxAware接口,通过不同类型的Aware接口拿到Spring容器的资源;如果实现了BeanPostProcessor接口,则会回调该接口的postProcessBeforeInitialization和postProcessAfterInitialization方法;如果配置了init-method方法,则会执行init-method配置的方法;如果Bean实现了DisposableBean接口,则会回调该接口的destroy方法;如果配置了destroy-method方法,则会执行destroy-method配置的方法。
4. 销毁:SpringBean的生命周期结束。

本文详细阐述了Spring框架中Bean的生命周期过程,包括实例化、属性填充、初始化方法调用、销毁、依赖注入、作用域管理、AOP代理和Profile功能等内容,帮助开发者理解和控制Bean的行为。
1786

被折叠的 条评论
为什么被折叠?



