Spring Bean 的生命周期和作用域?

简介: Spring Bean 的生命周期和作用域?

Spring Bean 的生命周期和作用域?



Spring Bean 的生命周期


Spring Bean 的生命周期可以分成,创建,使用,销毁几个过程。


Spring Bean 创建过程如下:


  1. 实例化 Bean 对象
  2. 设置 Bean 属性
  3. 通过各种 Aware 接口声明了依赖关系,则会注入 Bean 对容器基础设施层面的依赖,包括 BeanNameAware 、BeanFactoryAware 和 ApplicationContextAware 分别注入 BeanID ,BeanFactory或者ApplicationContext
  4. 调用 BeanPostProcessor 的前置初始化方法 postProcessBeforeInitialization
  5. 如果实现了InitializingBean 接口,会调用 afterPropertiesSet 方法。
  6. 调用 Bean 自身定义的 init 方法。
  7. 调用 BeanPostprocessor 的后置初始方法 postProcessAfterInitialization。
  8. 创建过程完毕。

640.png

Spring Bean 的销毁


Spring Bean 的销毁过程会依次调用 DisposableBean 的 destroy 方法和 Bean 自身定制的 destroy() 方法。


Spring Bean 作用域


Spring Bean 有五个作用域,最基础的是如下两种:

  • Singleton ,这是 Spring 的默认作用域,也就是为每个 IOC 容器创建唯一一个 Bean 实例,也称为单例。
  • Prototype ,针对每个 getBean 请求,容器会单独创建一个 Bean 实例。

从 Bean 的特点来看,Prototype 适合有状态的 Bean ,而Singleton 则更适合无状态的情况。

Web 容器还支持另外三种作用域

  • Request, 每个 HTTP 请求创建单独的 Bean 实例。
  • Session ,很显然 Bean 实例的作用域是 Session范围。
  • GlobalSession, 用于 Portlet 有单独的 Session,GlobalSession 提供了一个全局性的 HTTP Session。


Spring 基础机制


  • IOC, 控制反转(Invension of Control) ,或者叫做依赖注入(Depency Injection),通过这种机制,可以有效的改善模块之间的紧耦合问题。从 Bean 创建过程可以看到,它的依赖关系都是由容器负责注入。

spring 注入的四种方式:

  1. 构造器注入
  2. setter 方法注入
  3. 基于注解注入
  • AOP,我们是通过切面编程机制,Spring 框架中的事务、日志、安全、等功能都依赖 AOP 技术。

Spring AOP 关键概念

  1. Aspect , 通常叫做方面,它是跨不同 Java 类层面的横切行逻辑。在实现形式上,可以是 XML 文件中配置的普通类,也可以是 @Aspect 注解取声明。在运行时,Spring 框架会创建类似 Advisor 来指代它,其内部包括切入的时机(Pointcut)和动作 (Advide)
  2. Join Point 它是 Aspect 可以切入的特定点,在 Spring 里面只有方法可以作为 Join Point
  3. Advice ,定义了切面中能够采取的动作。


640.png


BeforeAdvice 和 AfterAdvice 包括他的子类接口是简单的实现,而 Interceptor 则是所谓的拦截器,用于拦截住方法调用事件,进而采取相应动作,所以 Interceptor 是覆盖整个方法过程调用的 Advice。通常将拦截器类型的 Advice叫做 Around ,在代码中使用 @Arround 来标记。aop:around。


640.png



PointCut 它负责具体定义 Aspect 被应用在哪些 Joint Point 可以通过指定具体的类名和方法名来实现。

640.png




相关文章
|
17天前
|
缓存 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。
72 9
Spring从入门到入土(bean的一些子标签及注解的使用)
|
1月前
|
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生命周期。
87 1
|
1月前
|
Java Spring
获取spring工厂中bean对象的两种方式
获取spring工厂中bean对象的两种方式
45 1
|
1月前
|
Java 开发者 Spring
Spring bean的生命周期详解!
本文详细介绍了Spring框架中的核心概念——Spring Bean的生命周期,包括实例化、属性赋值、接口回调、初始化、使用及销毁等10个阶段,并深入剖析了相关源码,如`BeanFactory`、`DefaultListableBeanFactory`和`BeanPostProcessor`等关键类与接口。通过理解这些核心组件,读者可以更好地掌握Spring Bean的管理和控制机制。
88 1
|
2月前
|
XML Java 数据格式
spring复习03,注解配置管理bean
Spring框架中使用注解配置管理bean的方法,包括常用注解的标识组件、扫描组件、基于注解的自动装配以及使用注解后的注意事项,并提供了一个基于注解自动装配的完整示例。
spring复习03,注解配置管理bean
|
5月前
|
Java 开发者 Spring
解析Spring中Bean的生命周期
解析Spring中Bean的生命周期
58 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生命周期分析
107 11
下一篇
无影云桌面