5

关于Spring Beans 的理解

 1 year ago
source link: https://blog.51cto.com/codeshallow/5701794
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

关于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) 。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK