zoukankan      html  css  js  c++  java
  • SpringBean

    SpringBean是Spring容器初始化、装配、管理的对象,Bean的定义以及之间的依赖通过配置元数据来表示。

    Bean的作用域

    Bean的默认作用域是单例的,即Spring容器中只会存在某个Bean的一个对象,通过多线程处理多个请求。如果想要Bean保持一些状态,单例可能就不是线程安全的,这时候可以把作用域设置为prototype的。
    Spring支持物种Bean的作用域,通过在Bena定义中配置<bean id="" class="" scope="singleton"

    singleton

    单例多线程处理多个请求
    

    prototype

    每次请求Bean(依赖注入或者getBean方法)都会new一个Bean对象
    

    request

    每次HttpRequest都会创建一个Bean对象
    

    session

    同一个session共享一个Bean对象,不同session使用不同Bean对象
    

    globalSession

    类似于session,仅在portlet应用下使用

    Bean的生命周期

    默认情况下,bean是和Spring容器一起初始化的,但是可以配置bean延迟加载,使它真正被请求的时候才初始化。

    管理Bean的初始化和销毁

    我们可以在Bean初始化完成和销毁之前做一些事情,我们可以通过实现接口、配置化和注解 三种方式指定完成的动作。

    InitializingBean和DisposableBean接口

    这两个接口分别有一个方法,分别在Bean属性值set完成和销毁前被调用,这两个方法是afterPropertiesSet和destroy

    在Bean定义中指定init-method和destroy-method

    使用@PostConstruct和@PreDestroy注解

    这两个注解相当于指定init和destroy

    BeanPostProcessor

    Bean后处理器有两个方法,分别在Bean初始化开始前和完成后被调用(注意这里的初始化不是jvm层面的,而是开发者对Bean定制的初始化过程)

    Bean生命周期总结

    Bean的生命周期大致分为初始化和销毁两个过程。我们可以对Bean的初始化和销毁过程进行管理。可以对所有Bean统一管理,通过实现BeanPostProcessor接口在所有Bean初始化前和初始化完成两个时间点进行管理。
    也可以对某个Bean进行定制化管理,对某个Bean初始化进行管理可以通过@PostConstruct注解方法、实现InitialzingBean接口的afterPropertiesSet方法、配置Bean杜希昂的init-method属性 这三种方法进行,对某个Bean的销毁过程进行管理可以通过@PreDestroy注解方法、实现DisposableBean接口的destroy方法、配置bean对象的destroy-method 这三种方法进行。
    注意,Spring IOC容器不会管理prototype作用域的Bean的销毁过程,即为prototype Bean设置的销毁方法一概不会调用
    下面是所有的Bean生命周期的时间点:

    - Spring容器初始化
    ===================
    - Bean的无参构造方法
    - setter
    - *Aware接口的方法
    - BeanPostProcessor的postProcessBeforeInitialization方法
    - @PostConstruct注解的方法
    - InitializingBean接口的afterPropertiesSet方法
    - init-method
    - BeanPostProcessor的postProcessAfterInitialization方法
    - Spring容器初始化完毕
    ===================
    - 从容器中获取Bean
    ===================
    - @PreDestroy注解的方法
    - DisposableBean接口的destroy方法
    - destroy-method
    - Spring容器关闭
    

    参考SpringBean

  • 相关阅读:
    心跳
    UITableView 总结(一)
    scrollView的contentSize,contentInsert,contentOffset
    如何跟踪论文的作者?
    hadoop与spark执行定时任务,linux执行定时任务
    java.lang.NoSuchMethodError问题处理
    数据挖掘与机器学习的相关理解
    HBASE
    腾讯云ping不通外网
    腾讯云,激活ubuntu root登录,设置ssh
  • 原文地址:https://www.cnblogs.com/darknessplus/p/10386894.html
Copyright © 2011-2022 走看看