关于Spring Beans 的理解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Spring Beans 的理解相关的知识,希望对你有一定的参考价值。

Spring Beans

1.什 么 是 Spring beans?

Spring beans 是 那 些 形 成 Spring 应 用 的 主 干 的 java 对象 。 它 们 被 Spring IOC 容 器 初 始 化 , 装 配 , 和 管 理 。 这

些 beans 通 过 容 器 中 配 置 的 元 数 据 创 建 。 比 如 , 以 XML文 件 中<bean/> 的 形 式 定 义 。

Spring 框 架 定 义 的 beans 都 是 单 件 beans。 在bean tag 中 有 个 属 性”singleton”, 如 果 它 被 赋 为TRUE,bean 就 是 单 件 , 否 则 就 是 一 个prototype bean。 默 认 是 TRUE, 所 以 所 有 在 Spring框 架 中 的 beans 缺 省 都 是 单 件 。

2. 一 个 Spring Bean 定 义 包 含 什 么 ?

一 个 Spring Bean 的 定 义 包 含 容 器 必 知 的 所 有 配 置 元 数据 , 包 括 如 何 创 建 一 个 bean, 它 的 生 命 周 期 详 情 及 它 的依 赖 。

3. 如 何 给 Spring 容 器 提 供 配 置 元 数 据?

这 里 有 三 种 重 要 的 方 法 给 Spring 容 器 提 供 配 置 元 数据 。

XML 配 置 文 件 。

基 于 注 解 的 配 置 。

基 于 java 的 配 置 。

4. 你 怎 样 定 义 类 的 作 用 域?

当 定 义 一 个<bean> 在 Spring 里 , 我 们 还 能 给 这 个bean 声 明 一 个 作 用 域 。 它 可 以 通 过 bean 定 义 中 的scope 属 性来 定 义 。

如 , 当 Spring 要 在 需 要 的 时 候 每 次生 产 一 个 新 的 bean 实 例 ,bean 的 scope 属 性 被 指 定 为prototype。

另 一 方 面 , 一 个 bean 每 次 使 用 的 时 候 必 须返 回 同 一 个 实 例 , 这 个 bean 的 scope 属 性 必 须 设 为

singleton。

5. 解 释 Spring 支 持 的 几 种 bean 的 作 用 域 。

Spring 框 架 支 持 以 下 五 种 bean 的 作 用 域 :

  • singleton : bean 在 每 个 Spring ioc 容 器 中 只 有 一 个 实例 。

  • prototype: 一 个 bean 的 定 义 可 以 有 多 个 实 例 。

  • request: 每 次 http 请 求 都 会 创 建 一 个 bean, 该 作 用域 仅 在 基 于 web 的 Spring ApplicationContext 情 形 下有 效 。

  • session: 在 一 个 HTTP Session 中 , 一 个 bean 定 义 对应 一 个 实 例 。 该 作 用 域 仅 在 基 于 web 的Spring ApplicationContext 情 形 下 有 效 。

  • global-session: 在 一 个 全 局 的 HTTP Session 中 , 一个 bean 定 义 对 应 一 个 实 例 。 该 作 用 域 仅 在 基 于 web 的Spring ApplicationContext 情 形 下 有 效 。缺 省 的 Spring bean 的 作 用 域 是 Singleton.

6.Spring 框 架 中 的 单 例 bean 是 线 程 安 全 的 吗?

不 ,Spring 框 架 中 的 单 例 bean 不 是 线 程 安 全 的 。

7. 解 释 Spring 框 架 中 bean 的 生 命 周 期 。

  • Spring 容 器 从 XML 文 件 中 读 取 bean 的 定 义 , 并 实 例化 bean。

  • Spring 根 据 bean 的 定 义 填 充 所 有 的 属 性 。

  • 如 果 bean 实 现 了 BeanNameAware 接 口 ,Spring 传 递 bean 的 ID 到 setBeanName 方 法 。

  • 如 果 Bean 实 现 了 BeanFactoryAware 接 口 , Spring传 递 beanfactory 给 setBeanFactory 方 法 。

  • 如 果 有 任 何 与 bean 相 关 联 的 BeanPostProcessors,Spring 会 在 postProcesserBeforeInitialization()方 法内 调 用 它 们 。

  • 如 果 bean 实 现 IntializingBean 了 , 调 用 它 的afterPropertySet 方 法 , 如 果 bean 声 明 了 初 始 化 方法 , 调 用 此 初 始 化 方 法 。

  • 如 果 有 BeanPostProcessors 和 bean 关 联 , 这 些 bean的 postProcessAfterInitialization() 方 法 将 被 调 用 。

  • 如 果 bean 实 现 了 DisposableBean, 它 将 调 用destroy()方 法 。

8. 哪 些 是 重 要 的 bean 生 命 周 期 方 法 ? 你 能 重 载 它 们吗 ?

有 两 个 重 要 的 bean 生 命 周 期 方 法 , 第 一 个 是 setup ,它 是 在 容 器 加 载 bean 的 时 候 被 调 用。

第 二 个 方 法 是teardown 它 是 在 容 器 卸 载 类 的 时 候 被 调 用 。

The bean 标 签 有 两 个 重 要 的 属 性 (init-method 和destroy-method) 。 用 它 们 你 可 以 自 己 定 制 初 始 化 和 注销 方 法 。 它 们 也 有 相 应 的 注 解 (@PostConstruct 和@PreDestroy) 。

以上是关于关于Spring Beans 的理解的主要内容,如果未能解决你的问题,请参考以下文章

Spring自动装配Beans

关于运行springboot时报Unregistering JMX-exposed beans on shutdown的解决方案

关于spring security的错误

关于spring的配置文件总结(转)

Spring8Spring框架中的单例Beans是线程安全的么

spring-beans中Aware相关接口的源码解析说明