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




相关文章
|
9月前
|
XML Java 测试技术
Spring IOC—基于注解配置和管理Bean 万字详解(通俗易懂)
Spring 第三节 IOC——基于注解配置和管理Bean 万字详解!
634 26
|
11月前
|
XML 安全 Java
|
11月前
|
存储 Java Spring
【Spring】获取Bean对象需要哪些注解
@Conntroller,@Service,@Repository,@Component,@Configuration,关于Bean对象的五个常用注解
295 12
|
11月前
|
存储 Java 应用服务中间件
【Spring】IoC和DI,控制反转,Bean对象的获取方式
IoC,DI,控制反转容器,Bean的基本常识,类注解@Controller,获取Bean对象的常用三种方式
397 12
|
11月前
|
XML Java 数据格式
Spring容器Bean之XML配置方式
通过对以上内容的掌握,开发人员可以灵活地使用Spring的XML配置方式来管理应用程序的Bean,提高代码的模块化和可维护性。
351 6
|
缓存 Java Spring
实战指南:四种调整 Spring Bean 初始化顺序的方案
本文探讨了如何调整 Spring Boot 中 Bean 的初始化顺序,以满足业务需求。文章通过四种方案进行了详细分析: 1. **方案一 (@Order)**:通过 `@Order` 注解设置 Bean 的初始化顺序,但发现 `@PostConstruct` 会影响顺序。 2. **方案二 (SmartInitializingSingleton)**:在所有单例 Bean 初始化后执行额外的初始化工作,但无法精确控制特定 Bean 的顺序。 3. **方案三 (@DependsOn)**:通过 `@DependsOn` 注解指定 Bean 之间的依赖关系,成功实现顺序控制,但耦合性较高。
741 4
实战指南:四种调整 Spring Bean 初始化顺序的方案
|
11月前
|
XML Java 数据格式
🌱 深入Spring的心脏:Bean配置的艺术与实践 🌟
本文深入探讨了Spring框架中Bean配置的奥秘,从基本概念到XML配置文件的使用,再到静态工厂方式实例化Bean的详细步骤,通过实际代码示例帮助读者更好地理解和应用Spring的Bean配置。希望对你的Spring开发之旅有所助益。
475 4
|
XML Java 数据格式
Spring从入门到入土(bean的一些子标签及注解的使用)
本文详细介绍了Spring框架中Bean的创建和使用,包括使用XML配置文件中的标签和注解来创建和管理Bean,以及如何通过构造器、Setter方法和属性注入来配置Bean。
235 9
Spring从入门到入土(bean的一些子标签及注解的使用)
|
11月前
|
安全 Java 开发者
Spring容器中的bean是线程安全的吗?
Spring容器中的bean默认为单例模式,多线程环境下若操作共享成员变量,易引发线程安全问题。Spring未对单例bean做线程安全处理,需开发者自行解决。通常,Spring bean(如Controller、Service、Dao)无状态变化,故多为线程安全。若涉及线程安全问题,可通过编码或设置bean作用域为prototype解决。
274 1
|
Java 测试技术 Windows
咦!Spring容器里为什么没有我需要的Bean?
【10月更文挑战第11天】项目经理给小菜分配了一个紧急需求,小菜迅速搭建了一个SpringBoot项目并完成了开发。然而,启动测试时发现接口404,原因是控制器包不在默认扫描路径下。通过配置`@ComponentScan`的`basePackages`字段,解决了问题。总结:`@SpringBootApplication`默认只扫描当前包下的组件,需要扫描其他包时需配置`@ComponentScan`。

热门文章

最新文章