栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring注解开发(二)——Bean的生命周期

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring注解开发(二)——Bean的生命周期

Bean的生命周期

bean创建—初始化—销毁的过程

容器管理bean的生命周期

可以自定义初始化和销毁方法;容器在bean进行到当前生命周期的时候,来调用自定义的初始化和销毁方法

构造{对象创建}

​ 单实例:在容器启动的时候创建对象

​ 多实例:在每次获取的时候创建对象

BeanPostProcessor.postProcessBeforeInitialization

初始化:

​ 单实例:对象创建完成,并赋值好,调用初始化方法

​ 多实例:在每次获取的时候创建对象,并赋值好,调用初始化方法

BeanPostProcessor.postProcessAfterInitialization

销毁

​ 单实例:容器关闭时调用销毁方法,列如:applicationContext.close()

​ 多实例:容器不会管理多实例的bean,用户自己管理

BeanPostProcessor原理分析
populateBean(beanName, mbd, instanceWrapper); // 给bean进行属性赋值
initializeBean(beanName, exposedObject, mbd); // 初始化bean
{
	applyBeanPostProcessorsBeforeInitialization(wrappedBean, beanName);
    {
        //遍历得到容器中所有的BeanPostProcessor:
        //挨个执行,一旦返回null,后面的就不再执行后面的BeanPostProcessor
    }
	invokeAwareMethods(beanName, bean);// 执行初始化
	applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName);   
    {
        //遍历得到容器中所有的BeanPostProcessor:
        //挨个执行,一旦返回null,后面的就不再执行后面的BeanPostProcessor
    }
}

初始化和销毁方法配置方式
  1. 指定初始化和销毁方法

    —xml方式

    指定int-method="", destory-method=""

    —注解方式

    @Bean(intMethod="", destoryMethod="")

  2. 通过让Bean实现InitializingBean(定义初始化方法)

    通过让Bean实现DisposableBean(定义销毁逻辑)

  3. 可以使用JSR250定义的注解:

    @PostConstruct:对象创建完成,并赋值之后调用

    @PreDestroy:在容器销毁容器前,执行销毁工作

  4. BeanPostProcessor【interface】:bean的后置处理器

    在bean初始化前后进行一些处理工作;

    postProcessBeforeInitialization:创建对象之后,自定义初始化之前

    postProcessAfterInitialization:自定义初始化之后调用

# 调用顺序输出
Construct: class nuts.sample.xml.bean.MyClass # 构造器方法
postProcessBeforeInitialization: myClass # 构造器方法之后,后续初始化方法之前
@PostConstruct # 用于需要在依赖注入完成后执行任何初始化的方法。
afterPropertiesSet # 在设置所有 bean 属性并满足BeanFactoryAware , ApplicationContextAware等之后,由包含BeanFactory调用。此方法允许 bean 实例在设置所有 bean 属性后执行其整体配置和最终初始化的验证。
@Bean(initMethod = ) # 初始化方法
postProcessAfterInitialization: myClass # 初始化之后调用
getBeanDefinitionNames: org.springframework.context.annotation.internalConfigurationAnnotationProcessor
getBeanDefinitionNames: org.springframework.context.annotation.internalAutowiredAnnotationProcessor
getBeanDefinitionNames: org.springframework.context.annotation.internalCommonAnnotationProcessor
getBeanDefinitionNames: org.springframework.context.event.internalEventListenerProcessor
getBeanDefinitionNames: org.springframework.context.event.internalEventListenerFactory
getBeanDefinitionNames: beanConfig
getBeanDefinitionNames: myBeanPostProcessor
getBeanDefinitionNames: person
getBeanDefinitionNames: myClass
getBean: nuts.sample.xml.bean.MyClass@4534d395 # 获取bean实例对象
@PreDestroy # 在销毁方法前调用
DisposableBean # 在销毁 bean 时由包含BeanFactory调用。
@Bean(destroyMethod = ) # 销毁方法

Spring低层对BeanPostProcessor的使用

​ bean的赋值,注入其他组件,@AutoWired,生命周期注解功能,@Async等 都是依赖于BeanPostProcessor实现

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/282466.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号