作用域:
Spring bean的作用域指的是bean实例的生命周期范围,即bean对象存活的时间和可见范围。Spring框架支持以下5种作用域:
-
singleton:单例模式,一个bean实例在整个应用中只会被创建一次。
-
prototype:原型模式,每次请求bean时都会创建一个新的实例。
-
request:请求模式,每次HTTP请求时都会创建一个新的实例,该实例仅在当前HTTP请求内有效。
-
session:会话模式,每次HTTP会话(session)时都会创建一个新的实例,该实例仅在当前HTTP会话内有效。
-
global session:全局会话模式,仅在使用portlet时有效,表示整个portlet应用共享一个会话。
生命周期:
Spring bean的生命周期包括以下三个阶段:
-
实例化:当Spring容器启动时,会根据配置文件中的bean定义创建bean实例。
-
初始化:在bean实例化后,Spring容器会执行一系列初始化操作,包括依赖注入、调用初始化方法等。
-
销毁:当Spring容器关闭时,会销毁所有的bean实例。在销毁之前,会执行一系列的销毁操作,包括调用销毁方法等。
下面是Spring bean的生命周期流程图:
从上图可以看出,Spring bean的生命周期包括以下几个阶段:
-
实例化:当Spring容器启动时,会根据配置文件中的bean定义创建bean实例。
-
属性赋值:在bean实例化后,Spring容器会执行属性注入操作,将依赖的属性值注入到bean实例中。
-
Aware回调:在属性赋值后,Spring容器会调用实现了Aware接口的bean的回调方法,如BeanNameAware、BeanFactoryAware等。
-
初始化前回调:在Aware回调后,Spring容器会调用实现了InitializingBean接口的bean的afterPropertiesSet()方法,或者在配置文件中通过init-method属性指定的初始化方法。
-
初始化后回调:在初始化前回调完成后,Spring容器会调用实现了BeanPostProcessor接口的bean的postProcessBeforeInitialization()方法,然后调用初始化方法。
-
销毁前回调:在bean销毁之前,Spring容器会调用实现了DisposableBean接口的bean的destroy()方法,或者在配置文件中通过destroy-method属性指定的销毁方法。
-
销毁后回调:在销毁前回调完成后,Spring容器会调用实现了BeanPostProcessor接口的bean的postProcessAfterInitialization()方法,然后销毁bean实例。
总结:
Spring bean的作用域和生命周期是Spring框架中非常重要的概念。通过合理配置作用域和生命周期,可以提高应用程序的性能和可维护性。在实际开发中,需要根据具体的业务需求和性能要求来选择合适的作用域和生命周期。