zoukankan      html  css  js  c++  java
  • Spring Bean的生命周期:

    spring中 Bean的生命周期, 一个对象的创建,并不单单是 new 了之后就可以了. 因为99%情况下,这个对象中是还有一些别的属性的, 还需要对这些属性赋值, new操作仅仅是创建了该对象,属性未赋值,
    Bean的生命周期就是, 从容器new 对象开始,---容器为这个对象各种赋值 和 AOP切面对该对象的增强-代理对象 和 我们自定义的初始化方法赋值----Bean 可以使用了放入单例池----容器关闭--调用Bean的销毁方法--我们自定义的销毁方法---结束

    calss---BeanDefinition ----BeanFactory组建完成----BeanFactoryPostProcessor----实例化new Person()----填充属性----Aware(这里指如果该对象有实现,继承各种各样的 ...Aware类,用来回调本身来赋值属性, 比如:BeanNameAware类( setBeanName() ), BeanFactoryAware类(setBeanFactory() ), ApplicationContextAware类( setApplicationContextAware() ) 等)----初始化(这里指如果xml中,该对象有 < init-method >标签, 或者该对象有实现InitializingBean接口,调用afterPropertiesSet() 方法, 自定义的初始化方法)
    ----AOP,这里指如果有切面,对该类进行代理增强,将代理对象放入单例池----Bean可以使用并放入单例池中

    直接上图

    BeanDefinition Bean定义, 这个类中有该类的各种信息,重要的信息是beanClass这个属性 也就是说对象实例化的时候, 是在类上加注解@Component, @Scope等等, 根据beanClass和这些注解生成BeanDefinition, 之后实例化对象的时候,是根据BeanDefinition的信息来进行实例化的, 所以如果修改 BeanDefinition 中的beanClass这个属性,那么实例化的对象也会改变

    BeanFactoryPostProcessor Bean工厂后置处理器,是在 BeanDefinition ----实例化 new Person(), 之间执行的

    BeanFactory是 Bean工厂,可以创建,获取Bean, Bean工厂后置处理器(BeanFactoryPostProcessor) 是在BeanFactory组件完成之后执行, 目的是让我们来操作Bean工厂, 所以,一个类如果继承了BeanFactoryPostProcessor, 就可以获取到,BeanDefinition, 和BeanFactory,Bean

    先配置扫描,当spring扫描到一个类时,发现该类上有@Component注解, 他会生成该类对应的BeanDefinition, 并将BeanDefinition放到 BeanFactory工厂的map中, key:beanName, value:BeanDefinition, 当把所有扫描完成后,
    BeanFactory组件就完成了, 之后就开始执行 BeanFactoryPostProcessor的方法, 之后才会实例化对象

    BeanPostProcessor, Bean后置处理器,实在 bean实例化之后执行

    ====================================================
    BeanDefinitionReader装载过程: 如图所示;BeanDefinitionReader读取xml文件,生成BeanDefinition,然后注册到BeanDefinitionRegistry中,

    有了BeanDefinition,然后就工厂 BeanFactory,来根据BeanDefinition,来实例化

    {{uploading-image-115734.png(uploading...)}}

    1, Bean的生命周期总结:几个关键的类/接口
    2, BeanDefinitionReader: 作用:读取xml, 创建BeanDefinition,并注册到 BeanDefinitionRegistry中
    3, BeanDefinition: 作用: 这个是Bean定义,里面包含了Bean的各种信息(包括,单例,beanClassName,isLazy....)Bean的创建都是按照BeanDefinition 为模板创建的
    4, BeanFactory: 作用:BeanFactory中的实现类 AbstractBeanFactory中有个map, key-->beanName value-->BeanDefinition
    5, BeanFactoryPostProcessor: 这个是BeanFactory的后置处理, 我们可以从中获取BeanFactory工厂, BeanDefinition
    6, 实例化Bean后,各种各样的Aware接口/类: 比如:BeanNameAware, BeanFactoryAware,ApplicationContextAware...作用是: 调用自身来给属性注入
    7, BeanPostProcesspr: 作用: 这个是对Bean初始化的 前,后处理类, 先执行postProcessBeforeInitialization()方法,然后Bean初始化(调用构造方法, 或者如果实现InitializingBean就执行他的 afterPropertiesSet(),或者自定义的初始化方法), 之后执行,postProcessAfterInitialization()
    8, Bean初始化完成可以使用了,放入单例池, 当容器关闭后,调用DispsableBean的distory()方法, 调用自定义销毁方法---结束

  • 相关阅读:
    51单片机数码管字符H自右向左移动
    51单片机点亮双向流水灯
    React 动态增减表单项
    React--Tree 点击节点收缩
    Redis 操作异常
    Linxu 后台运行
    vert.x学习(四),使用模板解析器ClassLoaderTemplateResolver
    vert.x学习(三),Web开发之Thymeleaf模板的使用
    vert.x学习(二),使用Router来定义用户访问路径
    vert.x学习(一),开篇之hello world
  • 原文地址:https://www.cnblogs.com/lvcai/p/13373013.html
Copyright © 2011-2022 走看看