java bean生命周期

Bean的生命周期是指Bean在Spring容器中的创建、存活以及销毁的整个过程。这个过程可以分为多个阶段,每个阶段都有其特定的任务和操作。以下是Bean生命周期的详细解释:

一、Bean生命周期的主要阶段

  1. Bean元信息配置阶段

    • 此阶段主要是配置Bean的元信息,包括Bean的定义、属性、依赖等。这些信息可以通过XML文件、注解、Java配置类等方式进行定义。
  2. Bean元信息解析阶段

    • Spring容器启动后,会解析配置文件中定义的Bean元信息,将其转换成Spring内部的BeanDefinition结构。BeanDefinition包含了Bean的各种定义信息,如类名、作用域、是否延迟初始化、依赖的Bean等
  3. 将Bean注册到容器中

    • 解析完Bean元信息后,Spring容器会将BeanDefinition注册到容器中,以便后续进行实例化、初始化等操作。
  4. BeanDefinition合并阶段

    • 对于存在多个BeanDefinition的情况,Spring容器会进行合并处理,以确保最终只有一个有效的BeanDefinition
  5. Bean Class加载阶段

    • 在实例化Bean之前,Spring容器会加载Bean的类定义。这一步是通过Java的类加载机制完成的。
  6. Bean实例化阶段

    • 此阶段Spring容器会根据BeanDefinition中的类名信息,使用反射机制创建Bean的实例。对于单例Bean,容器在启动时就会进行实例化;而对于多例Bean,则是在每次请求时才会进行实例化。
  7. 属性赋值阶段

    • 实例化完成后,Spring容器会根据BeanDefinition中的属性信息,对Bean的属性进行赋值。这包括依赖注入、值注入等
  8. Bean初始化阶段

    • 属性赋值完成后,Bean就进入了初始化阶段。在这个阶段,Spring容器会执行一些初始化操作,如调用初始化方法、设置Aware接口等。初始化方法可以通过实现InitializingBean接口、使用@PostConstruct注解或指定init-method属性来定义
  9. 所有单例bean初始化完成后阶段

    • 当所有的单例Bean都初始化完成后,Spring容器会执行一些额外的操作,如检查Bean之间的依赖关系是否满足等。
  10. Bean的使用阶段

    • 初始化完成后,Bean就可以被容器中的其他Bean或外部代码使用了。在使用过程中,Bean的状态可能会发生变化。
  11. Bean销毁前阶段

    • 当容器关闭或Bean不再需要时,Spring容器会执行一些销毁前的操作。这包括调用销毁方法、释放资源等。销毁方法可以通过实现DisposableBean接口、使用@PreDestroy注解或指定destroy-method属性来定义
  12. Bean销毁阶段

    • 最后,Spring容器会销毁Bean的实例,释放其占用的资源。对于单例Bean,容器关闭时就会进行销毁;而对于多例Bean,则是由Java垃圾回收器在对象不再被引用时自动回收

二、Bean生命周期中的关键接口和注解

  1. Aware接口

    • Aware接口是一组用于注入容器相关信息的接口。常见的Aware接口有BeanNameAware、BeanFactoryAware、ApplicationContextAware等。实现这些接口的Bean可以获取到Spring容器的相关信息,如Bean的名称、BeanFactory实例、ApplicationContext实例等。
  2. InitializingBean接口

    • InitializingBean接口定义了一个afterPropertiesSet方法,该方法在Bean的所有属性被Spring容器设置完成后调用。这允许Bean在初始化前后执行一些自定义的逻辑。
  3. DisposableBean接口

    • DisposableBean接口定义了一个destroy方法,该方法在Bean被销毁前调用。这允许Bean在销毁前执行一些清理工作,如释放资源、关闭连接等。
  4. @PostConstruct和@PreDestroy注解

    • @PostConstruct注解用于指定Bean初始化完成后需要执行的方法。@PreDestroy注解用于指定Bean销毁前需要执行的方法。这两个注解是JSR 250规范的一部分,可以在不实现接口的情况下为Bean添加初始化和销毁逻辑。
  5. BeanPostProcessor接口

    • BeanPostProcessor接口是Spring框架提供的一个强大的扩展点,允许在Bean初始化前后执行一些自定义的逻辑。实现该接口的Bean可以拦截容器中的Bean创建过程,并对Bean进行额外的处理。

三、总结

Bean的生命周期是Spring框架中的一个重要概念,它涵盖了Bean从创建到销毁的整个过程。在这个过程中,Spring容器通过一系列的操作和回调方法,为Bean提供了丰富的初始化、使用和销毁逻辑。开发者可以通过实现特定的接口、使用注解或指定方法名等方式,来参与和控制Bean的生命周期过程。

猜你喜欢

转载自blog.csdn.net/oopxiajun2011/article/details/143424969