• Spring


    生命周期

     Bean 生命周期的整个执行过程描述如下
    1)根据配置情况调用 Bean 构造方法或工厂方法实例化 Bean
    2)利用依赖注入完成 Bean 中所有属性值的配置注入。
    3)如果 Bean 实现了 BeanNameAware 接口,则 Spring 调用 Bean setBeanName() 方法传入当前
    Bean id 值。
    4)如果 Bean 实现了 BeanFactoryAware 接口,则 Spring 调用 setBeanFactory() 方法传入当前工厂
    实例的引用。
    5)如果 Bean 实现了 ApplicationContextAware 接口,则 Spring 调用 setApplicationContext() 方法
    传入当前 ApplicationContext 实例的引用。
    6)如果 BeanPostProcessor Bean 关联,则 Spring 将调用该接口的预初始化方法
    postProcessBeforeInitialzation() Bean 进行加工操作,此处非常重要,Spring AOP 就是利用它
    实现的。
    7)如果 Bean 实现了 InitializingBean 接口,则 Spring 将调用 afterPropertiesSet() 方法。初始化
    bean的时候执行,可以针对某个具体的bean进行配置。afterPropertiesSet 必须实现 InitializingBean
    接口。实现 InitializingBean接口必须实现afterPropertiesSet方法。
    8)如果在配置文件中通过 init-method 属性指定了初始化方法,则调用该初始化方法。
    9)如果 BeanPostProcessor Bean 关联,则 Spring 将调用该接口的初始化方法
    postProcessAfterInitialization()。此时,Bean 已经可以被应用系统使用了。
    10)如果在 中指定了该 Bean 的作用范围为 scope="singleton",则将该 Bean 放入 Spring IoC 的缓
    存池中,将触发 Spring 对该 Bean 的生命周期管理;如果在 中指定了该 Bean 的作用范围为
    scope="prototype",则将该 Bean 交给调用者,调用者管理该 Bean 的生命周期,Spring 不再管理该
    Bean
    11)如果 Bean 实现了 DisposableBean 接口,则 Spring 会调用 destory() 方法将 Spring 中的 Bean
    销毁;如果在配置文件中通过 destory-method 属性指定了 Bean 的销毁方法,则 Spring 将调用该方
    法对 Bean 进行销毁。

    配置参数

    属性描述
    class 这个属性是强制性的,并且指定用来创建 bean 的 bean 类。
    name/id 这个属性指定唯一的 bean 标识符。在基于 XML 的配置元数据中,你可以使用 ID 和/或 name 属性来指定 bean 标识符。
    scope 这个属性指定由特定的 bean 定义创建的对象的作用域, singleton、prototype、request、session 和 global session
    constructor-arg 它是用来注入依赖关系的,并会在接下来的章节中进行讨论。
    properties 它是用来注入依赖关系的,并会在接下来的章节中进行讨论。
    autowiring mode 它是用来注入依赖关系的,并会在接下来的章节中进行讨论。
    lazy-initialization mode 延迟初始化的 bean 告诉 IoC 容器在它第一次被请求时,而不是在启动时去创建一个 bean 实例。
    initialization 方法 在 bean 的所有必需的属性被容器设置之后,调用回调方法。它将会在 bean 的生命周期章节中进行讨论。
    destruction 方法 当包含该 bean 的容器被销毁时,使用回调方法。它将会在 bean 的生命周期章节中进行讨论。

    作用域

    Bean Scope作用域描述
    singleton 在spring IoC容器仅存在一个Bean实例,Bean以单例方式存在,默认值
    prototype 每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时,相当于执行newXxxBean()
    request 每次HTTP请求都会创建一个新的Bean,该作用域仅适用于WebApplicationContext环境
    session 同一个HTTP Session共享一个Bean,不同Session使用不同的Bean,仅适用于WebApplicationContext环境
    global-session 一般用于Portlet应用环境,该作用域仅适用于WebApplicationContext环境

    构造方法

    默认使用JavaBean类的无参构造方法,但若使用有参构造则有三种解决方案

    1. 构造函数参数索引:<constructor-arg index="0" value="嘿嘿"/>

    1. 构造函数参数类型匹配: 不建议使用 <constructor-arg type="java.lang.String" value="42"/>

    1. 构造函数参数名称(推荐): <constructor-arg name="str" value="嘿嘿"/>

    或通过静态工厂方法或非静态工厂方法创建对象

     

     

     声明式事务

  • 相关阅读:
    EF实现增删改查
    托管代码与非托管代码的区别
    堆、栈以及队列
    C#装箱和拆箱
    Leecode刷题之旅-C语言/python-349两个数组的交集
    Leecode刷题之旅-C语言/python-344反转字符串
    Leecode刷题之旅-C语言/python-217存在重复元素
    Leecode刷题之旅-C语言/python-206反转链表
    Leecode刷题之旅-C语言/python-204计数质数
    Leecode刷题之旅-C语言/python-203移除链表元素
  • 原文地址:https://www.cnblogs.com/WindyZ/p/14088191.html
Copyright © 2020-2023  润新知