前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring学习笔记3_Bean 获取与实例化

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

作者头像
Java学习
发布2018-04-17 15:45:51
6290
发布2018-04-17 15:45:51
举报
文章被收录于专栏:java学习java学习
本章目录

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 有效果。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-04-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 java学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档