春豆是世界上的什么?

gra*_*hey 372 java grails spring

我还没有找到我能理解的Spring bean的高级定义.我在Grails文档和书籍中经常引用它们,但我认为理解它们是有益的.那么什么是春豆?他们怎么用?他们是否与依赖注入有关?

Jun*_*san 196

构成应用程序主干并由Spring IoC*容器管理的对象称为bean.bean是一个由Spring IoC容器实例化,组装和管理的对象.这些bean是使用您提供给容器的配置元数据创建的,例如,以XML定义的形式.

有关SpringSource的 bean和范围的更多信息:

在创建bean定义时,实际创建的是用于创建由该bean定义定义的类的实际实例的配方.bean定义是一个配方的想法很重要,因为这意味着,就像一个类一样,你可以从一个配方创建许多对象实例.

您不仅可以控制要插入到从特定bean定义创建的对象的各种依赖项和配置值,还可以控制从特定bean定义创建的对象的范围.这种方法非常强大,使您可以灵活地选择通过配置创建的对象的范围,而不必在Java类级别"烘焙"对象的范围.可以将Bean定义为部署在多个范围之一中

*IoC:控制反转

  • @grantmc有点像这样,除了控制事物的反转应该被理解为与"问"相反:而不是"要求"事物,你"宣称"你需要它.然后,当您启动应用程序时,框架将检查所有声明并设置适当的实例. (20认同)
  • 定义IoC对Spring新手的意义是有帮助的. (16认同)
  • 所以这些是容器管理的对象,我不需要触摸,但如果我想访问bean来调用某些方法或检索属性,那么我可以"问"Spring的bean吗? (8认同)
  • @elias如何声明我需要它?是在我使用`@Autowired`时?或者只是当我做`import`s? (6认同)
  • @lucas同意.IoC是"控制反转".查看优秀的问答:[什么是Spring Framework中的依赖注入和控制反转?](http://stackoverflow.com/questions/9403155/what-is-dependency-injection-and-inversion-of-control-in-spring -framework)和[什么是控制反转?](http://stackoverflow.com/questions/3058/what-is-inversion-of-control). (4认同)
  • @grantmc是你要通过容器处理的对象,它们的创建它们的retreival等 (3认同)

Eli*_*les 123

Spring bean只是由Spring容器管理的对象实例,即它们由框架创建和连接并放入"对象包"(容器)中,以后可以从中获取它们.

"布线"部分是依赖注入的全部内容,它意味着您可以只说"我将需要这个东西",框架将遵循一些规则来获得正确的实例.

对于不习惯Spring的人,我认为Wikipedia Spring的文章有一个很好的描述:

Spring Framework的核心是控制容器的反转,它提供了使用反射配置和管理Java对象的一致方法.容器负责管理特定对象的对象生命周期:创建这些对象,调用它们的初始化方法,以及通过将它们连接在一起来配置这些对象.

容器创建的对象也称为托管对象bean.可以通过加载XML文件或检测配置类上的特定Java注释来配置容器.这些数据源包含bean定义,这些定义提供了创建bean所需的信息.

可以通过依赖查找依赖注入来获得对象.依赖关系查找是一种模式,其中调用者向容器对象请求具有特定名称或特定类型的对象.依赖注入是一种模式,容器通过构造函数,属性或工厂方法将对象按名称传递给其他对象.

  • 兔子洞越来越深。 (2认同)

Pre*_*raj 43

首先让我们了解一下Spring:

Spring是一个轻量级且灵活的框架.

比喻:
在此输入图像描述

Bean:是一个对象,它在Spring Container中创建,管理和销毁.我们可以通过元数据(xml或注释)将对象注入Spring容器,这称为控制反转.

打个比方: 让我们假设农民正在通过种子(或豆类)种植农田.在这里,农民是春天的框架,农田土地是春天的容器,豆子是春天的豆子,培养是春天的处理器.

在此输入图像描述

就像豆子生命周期一样,春豆也有它自己的生命周期.

在此输入图像描述

在此输入图像描述

img来源

以下是Spring中bean生命周期的序列:

  • 实例化:首先,spring容器从XML文件中查找bean的定义并实例化bean.

  • 填充属性:使用依赖注入,spring填充bean定义中指定的所有属性.

  • 设置Bean名称:如果bean实现了BeanNameAware接口,spring将bean的id传递给setBeanName()方法.

  • 设置Bean工厂:如果Bean实现BeanFactoryAware接口,spring将beanfactory传递给setBeanFactory()方法.

  • 预初始化:也称为bean的后期处理.如果有任何Bean BeanPostProcessors与bean关联,则Spring调用postProcesserBeforeInitialization()方法.

  • 初始化bean:如果bean实现IntializingBean,afterPropertySet()则调用其方法.如果bean具有init方法声明,则调用指定的初始化方法.

  • 后初始化: - 如果BeanPostProcessors与bean关联,postProcessAfterInitialization()则将调用它们的方法.

  • 准备使用:现在应用程序可以使用bean了

  • Destroy:如果bean实现DisposableBean,它将调用该destroy()方法

  • 我很抱歉,但是说“Spring 是一个轻量级的[...]框架”是绝对荒谬的。 (21认同)

dma*_*tro 22

嗯,你部分了解它.您必须根据需要定制bean,并通过使用由Martin Fowler创建的称为IoC(Inversion of Control)的方法(也称为依赖注入(DI))通知Spring容器在需要时进行管理.

您以某种方式连接bean,这样您就不必处理实例化或评估对bean的任何依赖性.这通常被称为好莱坞原则.

除了在这个问题中你会被充斥的链接之外,谷歌是探索更多内容的最佳工具.:)

  • 不能指出IoC是概念,而DI是可用于实现IoC的技术(之一),它们不是可替代的定义。 (2认同)

Ion*_*Kat 14

一个 Bean 是一个 POJO(Plain Old Java Object),由 spring 容器管理。

Spring 容器默认只创建 bean 的一个实例。? 这个 bean 缓存在内存中,因此对 bean 的所有请求都将返回对同一个 bean 的共享引用。

@Bean 注解返回一个对象,spring 在应用程序上下文中注册为 bean。方法内部的逻辑负责创建实例。

我们什么时候使用@Bean 注解?

当自动配置不是一个选项时。例如,当我们想从第三方库连接组件时,因为源代码不可用所以我们不能用@Component 注释类。

实时场景可能是有人想要连接到 Amazon S3 存储桶。因为源不可用,他必须创建一个@bean。

@Bean
public AmazonS3 awsS3Client() {
    BasicAWSCredentials awsCreds = new BasicAWSCredentials(awsKeyId, accessKey);
    return AmazonS3ClientBuilder.standard().withRegion(Regions.fromName(region))
            .withCredentials(new AWSStaticCredentialsProvider(awsCreds)).build();
}
Run Code Online (Sandbox Code Playgroud)

上面代码的来源 -> https://www.devglan.com/spring-mvc/aws-s3-java

因为我上面提到了@Component Annotation。

@Component 表示一个带注释的类是一个“组件”。在使用基于注释的配置和类路径扫描时,此类类被视为自动检测的候选对象。

组件注释将类注册为单个 bean。


jur*_*rez 11

对于Spring boot应用程序来说,bean只是一个Java对象,它在应用程序启动时由Spring框架创建。

对象的目的几乎可以是任何东西——配置、服务、数据库连接工厂等——Spring 并不关心。

大多数 bean 依赖于其他 bean 来工作,例如实体管理器可能需要数据库连接。Spring 框架能够确定如何将 bean 自动连接在一起。从应用程序开发人员的角度来看,您只需声明所需的 bean,它们就会“神奇地”出现在您的应用程序中可供使用。


Yas*_*ary 8

Spring有IoC容器,带有Bag of Bean; 创建维护和删除是Spring Container的职责.我们可以通过布线和自动布线将bean放入Spring中.接线意味着我们手动将其配置为XML文件,"自动接线"意味着我们将注释放在Java文件中,然后Spring自动扫描java配置文件的根上下文,制作并放入Spring包中.

这是详细信息URI,您可以在其中获得有关Beans的更多信息


Dow*_*ski 8

Spring bean 是类。您不是实例化一个类(使用new),而是bean从应用程序上下文中获取一个实例作为您的类类型的强制转换,其中 bean 是您在应用程序上下文配置中配置的内容。这样,整个应用程序在整个应用程序中维护单例范围的实例。在实例化应用程序上下文之后,所有 bean 都按照它们的配置顺序进行初始化。即使您的应用程序中没有任何 bean,在您创建应用程序上下文后的那一刻,所有 bean 实例都已经创建。

  • Bean **不是**类,而是作为类实例的对象,由容器实现管理。 (4认同)

小智 6

  • Spring bean只是由Spring IOC容器管理的对象实例.

  • Spring IOC容器带有Bag of Bean.Bean的创建,维护和删除是Spring Container的职责.

  • 我们可以通过布线和自动布线将bean放入Spring中.

  • 接线意味着我们手动将其配置到XML文件中.

  • 自动接线意味着我们将注释放在Java文件中,然后Spring自动扫描java配置文件所在的根上下文,并将其放入Spring的包中.