分享

Spring学习笔记3_Bean 获取与实例化

 太极混元天尊 2018-04-17


本章目录
Spring学习笔记3_Bean 获取与实例化
1.ApplicationContext与BeanFactory关系
2.Bean的实例化方式
   2.1无参数构造
   2.2静态工厂方法
   2.3实例工厂方法
3.Bean的作用域
4.Bean的生命周期
提示:点击文章底部的“阅读原文”查看以前所有的笔记
1 ApplicationContext 与 BeanFactory 关系 

ApplicationContext 它是扩展 BeanFactory 接口。 BeanFactory 它采取延迟加载的方案,只有真正在 getBean 时才会实例化 Bean 

 

在开发中我们一般使用的是 ApplicationContext,真正使用的是其实现类, FileSystemXmlAppliCationContext 根据文件路径获取 ClassPathXmlApplicationContext  根据类路径获取 AppliCationContext它会在配置文件加载时,就会初始化Bean,并且ApplicationContext 它 提 供 不 同 的 应 用 层 的 Context 实现。例如在 web 开 发 中 可 以 使 用 WebApplicationContext. 

2. Bean 的实例化方式 

2.1. 无参数构造 

对于这种方式,注意 Bean 类中必须提供无参数构造。 

2.2. 静态工厂方法 

需要创建一个工厂类,在工厂类中提供一个 static 返回 bean 对象的方法就可以。 

2.3. 实例工厂方法 

需要创建一个工厂类,在工厂类中提供一个非 static 的创建 bean 对象的方法,在配置文件

中需要将工厂配置,还需要配置 bean 

 

 

3. Bean 的作用域 

在 bean 声明时它有一个 scope 属性,它是用于描述 bean 的作用域。 可取值有: 
singleton:单例 代表在 spring ioc 容器中只有一个 Bean 实例 (默认的 scope)  prototype:多例 每一次从 spring 容器中获取时,都会返回一个新的实例  request:用在 web 开发中,将 bean 对象 request.setAttribute()存储到 request 域中 
session: 用在 web 开发中,将 bean 对象 session.setAttribute()存储到 session 域中 

 

在开如常用的值是 singleton 与 prototype 

4. Bean 的生命周期 

1. instantiate bean 对象实例化 

2. populate properties 封装属性
3. 如果 Bean 实现 BeanNameAware 执行 setBeanName
4. 如果 Bean 实现 BeanFactoryAwar 或 ApplicationContextAwar 设置工厂 setBeanFactory 或上 下文对象 setApplicationContext
5. 如果存在类实现 BeanPostProcess(后处理 Bean),执行 postProcessBeforeInitialization
6. 如果 Bean 实现 InitializingBean 执行 afterPropertiesSet
7. 调用自定义的 init-method 方法
8. 如果存在类实现 BeanPostProcessor(处理 Bean),执行 postProcessAfterInitialization
9. 执行业务处理
10. 如果 Bean 实现 DisposableBean 执行 destroy
11. 调用自定义的 destroy-method 

 

对于 bean 的生命周期方法:
第三步与第四步是让 Bean 了解 spring 容器。 

第五步与第八步 可以针对指定的 Bean 进行功能增强,这时一般会使用动态代理. 

第六步与第十步:通过实现指定的接口来完成 init 与 destroy 操作 但是在开发中一般不使用第 6 步与第 10 步,原因是我们可以使用第 7 步与第 11 步来完成。

 第 7 步与第 11 步的初始化与销毁操作它无耦合,推荐使用的。但是必须在配置文件中指定 初始化与销毁的方法 

 

总结: 
对于 bean 的生命周期,我们需要关注的主要有两个方法: 1. 增强 bean 的功能可以使用后处理 Bean, BeanPostProcessor 2. 如果需要初始化或销毁操作我们可以使用 init-method  destroy-method 

 

注意:destroy-method 只对 scope=singleTon 有效果。 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多