首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Spring中Bean的相关知识

Spring中Bean的相关知识

原创
作者头像
JiahuiZhu1998
发布2022-10-11 10:41:51
发布2022-10-11 10:41:51
5210
举报

Bean的生命周期

普通的JAVA Class 经过 Bean Definition 变成 Spring Bean

概括来说是4个阶段:

实例化(Instantiation) ---- 属性赋值(Populate) ---- 初始化(Initialization) ---- 销毁(Destruction)

在 doCreateBean 方法中有三个方法可以直接对应前三个阶段

代码语言:javascript
复制
 // 忽略了无关代码
protected Object doCreateBean(final String beanName, final RootBeanDefinition mbd, final @Nullable Object[] args)
      throws BeanCreationException {

   // Instantiate the bean.
   BeanWrapper instanceWrapper = null;
   if (instanceWrapper == null) {
       // 实例化阶段!
      instanceWrapper = createBeanInstance(beanName, mbd, args);
   }

   // Initialize the bean instance.
   Object exposedObject = bean;
   try {
       // 属性赋值阶段!
      populateBean(beanName, mbd, instanceWrapper);
       // 初始化阶段!
      exposedObject = initializeBean(beanName, exposedObject, mbd);
   }

   
   }

下图的 两个 BeanPostProcessor 同时影响多个Bean

InstantiationAwareBeanPostProcessor 是 BeanPostProcessor的子类, 两个都是 BPP处理器

Spring Bean 生命周期 FlowChart (1)
Spring Bean 生命周期 FlowChart (1)

而 Aware系列函数用于影响单个 Bean

Aware 分为 Group 1Group 2:

Aware Group 1 包含 BeanNameAware, BeanClassLoaderAware, BeanFactoryAware

Aware Group 2 包含 EnvironmentAware, EmbeddedValueResolverAware 和

ApplicationContextAware(ResourceLoaderAware\ApplicationEventPublisherAware\MessageSourceAware)

下图是 Spring Bean 生命周期完整的 FlowChart

Spring Bean 生命周期 FlowChart (2)
Spring Bean 生命周期 FlowChart (2)

Bean Definition 相关知识

Bean Definition 是 Spring Framework 中定义的Bean的配置元信息接口, 包含4个部分:

1. Bean 的 Class Name (类名)

2. Bean 的 行为配置元素, 包括: 作用域, 自动绑定的模式, 生命周期回调等

3. Bean 的 Collaborators 或者 Dependencies (Bean的引用)

4. Bean 的 Properties (配置设置)


Bean 的作用域

Bean Scope 一共有 5种取值, 2种应用于 Spring IOC 容器, 另外3种应用于 Spring Web (XmlWebApplicationContext)

在使用时, 使用 @Scope 注解 或者 在 xml文件中 使用 <bean scope = >

  • Singleton 又称为单例模式, 每一个Bean在一个Spring IOC中都是独特的, 叫做 Bean的 Singleton.
  • Prototype 又称为原型模式, 每一次获取Bean时, 都会根据原型创建一个新的实例, 叫做 Bean 的 Prototype.
  • Request 指的是 在一次http request 中, Spring Web 只会生成一个实例
  • Session 指的是 在一次http session 中, Spring Web 只会生成一个实例
  • Global Session 指的是 在Spring Web Porlet项目中, Global Session 会和 Session 有区分, Global Session是有全局作用的Session (其中 http dialog, session 等基础通信知识可以自行搜索)


Bean 的延迟加载

在使用时, 使用 @Lazy 注解防止 circular使用bean, 在 xml文件中 使用 <bean lazy-init= >


Bean 的初始化和销毁前后回调方法

初始化实现: 1. 通过 Java 的 @PostConstruct

2. 通过 Spring 的 InitializingBean 接口, 然后 Override afterPropertiesSet方法

3. 通过 Spring 的 XML Bean 配置 或 Bean的注解 指定初始化方法

销毁前后实现:

1. 通过 Java 的 @PreDestroy

2. 通过 Spring 的 DisposableBean 接口, 然后 Override destroy 方法

3. 通过 Spring 的 XML Bean 配置 或 Bean的注解 指定销毁方法

完整的 初始化 和 销毁 顺序 是:

初始化: Class Constructor ------ @PostConstruct ------ InitializingBean ------ init-method

销毁 : @PreDestroy ------ DisposableBean ------ destroyMethod

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Bean的生命周期
    • 普通的JAVA Class 经过 Bean Definition 变成 Spring Bean
    • 概括来说是4个阶段:
    • 实例化(Instantiation) ---- 属性赋值(Populate) ---- 初始化(Initialization) ---- 销毁(Destruction)
    • 在 doCreateBean 方法中有三个方法可以直接对应前三个阶段
    • 下图的 两个 BeanPostProcessor 同时影响多个Bean
    • InstantiationAwareBeanPostProcessor 是 BeanPostProcessor的子类, 两个都是 BPP处理器
    • 而 Aware系列函数用于影响单个 Bean
    • 下图是 Spring Bean 生命周期完整的 FlowChart
  • Bean Definition 相关知识
  • Bean 的作用域
    • Bean Scope 一共有 5种取值, 2种应用于 Spring IOC 容器, 另外3种应用于 Spring Web (XmlWebApplicationContext)
    • 在使用时, 使用 @Scope 注解 或者 在 xml文件中 使用 <bean scope = >
  • Bean 的延迟加载
    • 在使用时, 使用 @Lazy 注解防止 circular使用bean, 在 xml文件中 使用 <bean lazy-init= >
  • Bean 的初始化和销毁前后回调方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档