zoukankan      html  css  js  c++  java
  • Spring → 04:Bean(1)

    一、Bean概念

    Spring Bean是被实例的,组装的及被Spring 容器管理的Java对象。

    Spring 容器会自动完成@bean对象的实例化。

    创建应用对象之间的协作关系的行为称为:装配(wiring),这就是依赖注入的本质。

    1.1、BeanFactory与工厂模式创建Bean

    1.2、ApplicationContext与容器组件及主要实现类

    二、Bean基础知识

      2.1、id、name、class、scope属性介绍

    2.2、depends-on、abstract、parent属性介绍

    2.3、Spring bean 何时初始化

      1、如果bean的scope是singleton,lazy-init为false(默认)则在ApplicationContext;启动的时候实例化bean,如果为true,则在第一次使用该bean的时候实例化
      2、如果bean的scope是其它类型,则在第一次使用的时候进行实例化

    2.4、Spring bean作用域

    1、singleton 单例(默认),这里的单例跟设计模式里面的单例模式不一样,由容器来保证这种类型的bean只存在一个共享实例。
    2、prototy 原型,每次使用时产生一个新的实例
    3、request 对每次http请求产生一个新的实例
    4、session 对每次http session产生一个新的实例
    5、global session 每个全局的http session对应一个bean实例

    三、Bean的生命周期

    3.1、展示Bean生命周期的各个阶段

      1. 实例化一个Bean,也就是我们通常说的new
      2. 按照Spring上下文对实例化的Bean进行配置,也就是IOC注入
      3. 如果这个Bean实现了BeanNameAware接口,会调用它实现的setBeanName(String beanId)方法,此处传递的是Spring配置文件中Bean的ID。实现该接口可以获取当前Bean的名字。
      4. 如果这个Bean实现了BeanFactoryAware接口,会调用它实现的setBeanFactory(),传递的是Spring工厂本身(可以用这个方法获取到其他Bean)。实现该接口可以获取BeanFactory对象。
      5. 如果这个Bean实现了ApplicationContextAware接口,会调用setApplicationContext(ApplicationContext)方法,传入Spring上下文,该方式同样可以实现步骤4,但比4更好,以为ApplicationContext是BeanFactory的子接口,有更多的实现方法
      6. 如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessBeforeInitialization(Object obj, String s)方法,BeanPostProcessor经常被用作是Bean内容的更改,并且由于这个是在Bean初始化结束时调用After方法,也可用于内存或缓存技术。
      7. 如果这个Bean在Spring配置文件中配置了init-method属性会自动调用其配置的初始化方法
      8. 如果这个Bean关联了BeanPostProcessor接口,将会调用postAfterInitialization(Object obj, String s)方法
      注意:以上工作完成以后就可以用这个Bean了,那这个Bean是一个single的,所以一般情况下我们调用同一个ID的Bean会是在内容地址相同的实例
      9. 当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean接口,会调用其实现的destroy方法
      10. 最后,如果这个Bean的Spring配置中配置了destroy-method属性,会自动调用其配置的销毁方法

    3.2、自定义容器组件模拟Spring Bean的IoC

     

  • 相关阅读:
    作业三
    作业二
    4.9上机作业
    4.2Java
    Java作业
    第四周上级作业
    第三周作业
    第一次上机练习
    [ZJOI2009]假期的宿舍
    [ZJOI2007]矩阵游戏
  • 原文地址:https://www.cnblogs.com/BalmyLee/p/10936514.html
Copyright © 2011-2022 走看看