美文网首页
spring Bean 生命周期

spring Bean 生命周期

作者: hehehehe | 来源:发表于2020-06-16 10:35 被阅读0次
    image.png

    而我们记忆其过程便可以从这 4 个阶段出发,实例化、属性赋值、初始化、销毁。其中细节较多的便是初始化,涉及了 Aware、BeanPostProcessor、InitializingBean、init-method 的概念。这些都是 Spring 提供的扩展点

    Aware 接口

    BeanFactory 类型的容器

    若 Spring 检测到 bean 实现了 Aware 接口,则会为其注入相应的依赖。所以通过让bean 实现 Aware 接口,则能在 bean 中获得相应的 Spring 容器资源。
    Spring 中提供的 Aware 接口有:
    1、BeanNameAware:注入当前 bean 对应 beanName;
    2、BeanClassLoaderAware:注入加载当前 bean 的 ClassLoader;
    3、BeanFactoryAware:注入 当前BeanFactory容器的引用。

    ApplicationContext 类型的容器,

    也提供了 Aware 接口,只不过这些 Aware 接口的注入实现,是通过 BeanPostProcessor 的方式注入的,但其作用仍是注入依赖。

    1、EnvironmentAware:注入 Enviroment,一般用于获取配置属性;

    2、EmbeddedValueResolverAware:注入 EmbeddedValueResolver(Spring EL解析器),一般用于参数解析;

    3、ApplicationContextAware(ResourceLoader、ApplicationEventPublisherAware、MessageSourceAware):注入 ApplicationContext 容器本身。

    BeanPostProcessor

    BeanPostProcessor 是 Spring 为*修改 bean *提供的强大扩展点,其可作用于容器中所有 bean
    常用场景有:
    1、对于标记接口的实现类,进行自定义处理。例如3.1节中所说的ApplicationContextAwareProcessor,为其注入相应依赖;再举个例子,自定义对实现解密接口的类,将对其属性进行解密处理;
    2、为当前对象提供代理实现。例如 Spring AOP 功能,生成对象的代理类,然后返回。

    InitializingBean 和 init-method

    InitializingBean 和 init-method 是 Spring 为 bean 初始化提供的扩展点。

    总结

    Bean的完整生命周期经历了各种方法调用,这些方法可以划分为以下几类:

    1、Bean自身的方法:这个包括了Bean本身调用的方法和通过配置文件中<bean>的init-method和destroy-method指定的方法

    2、Bean级生命周期接口方法:这个包括了BeanNameAware、BeanFactoryAware、InitializingBean和DiposableBean这些接口的方法

    3、容器级生命周期接口方法:这个包括了InstantiationAwareBeanPostProcessor 和 BeanPostProcessor 这两个接口实现,一般称它们的实现类为“后处理器”。
    BeanPostProcessor接口包括2个方法postProcessAfterInitialization和postProcessBeforeInitialization,这两个方法的第一个参数都是要处理的Bean对象,第二个参数都是Bean的name。返回值也都是要处理的Bean对象。这里要注意。

    4、工厂后处理器接口方法:这个包括了AspectJWeavingEnabler, ConfigurationClassPostProcessor, CustomAutowireConfigurer等等非常有用的工厂后处理器  接口的方法。工厂后处理器也是容器级的。在应用上下文装配配置文件之后立即调用。

    相关文章

      网友评论

          本文标题:spring Bean 生命周期

          本文链接:https://www.haomeiwen.com/subject/unllxktx.html