3

有人可以概述或总结一下 Spring 框架上下文中 bean 的用途吗?

我了解标准的 Java bean(没有 arg 构造函数、getter/setter,通常是序列化的),但 Spring bean 的用途似乎有所不同。

它是一种以简单、可重用的方式实现单例设计模式(一个实例,例如工厂类)的方法吗?

我主要使用带有注释的 Spring ,但我觉得我需要掌握这一点才能理解 Spring。

谢谢!

4

3 回答 3

7

Bean 是构成应用程序主干的对象。

bean只是一个Spring IoC 容器实例化组装和以其他方式管理的对象;除此之外,bean 没有什么特别之处。在所有其他方面,它可能是应用程序中的许多对象之一。

Spring bean 在 spring 配置文件中或通过使用注解定义,由 Spring 容器实例化,然后注入到您的应用程序中。

除非您明确地将 Spring bean 设为单例设计模式,否则它们不会成为单例设计模式。单例设计模式spring 范围“单例”不同的东西。您可以根据需要定义不同的 bean 范围。

范围可以是:

  1. 单例 - 每个 Spring IoC 容器返回一个 bean 实例
  2. 原型 – 每次请求时返回一个新的 bean 实例
  3. request – 每个 HTTP 请求返回一个 bean 实例。
  4. session – 每个 HTTP 会话返回一个 bean 实例。
  5. globalSession – 每个全局 HTTP 会话返回一个 bean 实例。

默认范围是单例。

于 2013-05-14T13:18:35.043 回答
4

我了解标准的 Java bean(没有 arg 构造函数、getter/setter,通常是序列化的),但 Spring bean 的用途似乎有所不同。

你的意思是总是序列化。为什么你认为目的似乎不同?

最后,你编写类。很多时候这些都是 POJO,Plain Old Java Objects。有时你实现一个接口或扩展一个类,但它都只是类。

bean 只是类。不要过于复杂。

现在 Spring 可能会采用您的 bean(类)并通过许多策略(原型、单例)中的任何一个为您管理它们,但这并不会改变 bean 是什么,它说明了 Spring 如何管理bean。

于 2013-05-14T13:10:28.820 回答
4

为了更好地理解,您应该熟悉依赖注入。简而言之,依赖注入允许您使用对象或服务而无需显式创建它们(当然,它提供了其他好处,但让我们关注这个问题)。这是通过维护一个依赖容器来实现的,该容器 - 粗略地说 - 一个 bean 的集合。

bean 是您在应用程序中使用的服务/组件。与 EJB 不同,使用 Spring 的 bean 不受构造函数参数或特定注释的约束(尤其是在使用 xml 上下文时)。您将 bean 注册到容器(通过定义上下文),当您需要它时,容器将为您提供该 bean 的实例。为了创建 bean,容器检查其类和构造函数,并使用该上下文中的任何其他注册 bean 来调用适当的构造函数或属性设置器。

您可以将 bean 配置为单例- 这不是设计模式术语中的单例。单例 bean在容器中创建一次,每当从该容器请求 bean 时,都会使用相同的实例。您还可以使用原型作用域强制容器每次创建一个新实例。

于 2013-05-14T13:19:58.337 回答