春豆是世界上的什么?

时间:2013-06-19 14:05:07

标签: java spring grails

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

12 个答案:

答案 0 :(得分:187)

  

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

SpringSource了解更多关于bean和范围的内容:

  

创建bean定义时,实际创建的是一个   用于创建该bean定义的类的实际实例的配方   定义。 bean定义是一个配方的想法很重要,   因为它意味着,就像一个类,你可能有   从单个配方创建的许多对象实例。

     

您不仅可以控制各种依赖项和配置   要插入从a创建的对象的值   特定的bean定义,也是创建的对象的范围   来自特定的bean定义。这种方法非常强大   使您可以灵活地选择对象的范围   通过配置创建,而不必“烘焙”范围   Java类级别的对象。豆可以定义为   部署在多个范围之一

* IoC:控制反转

答案 1 :(得分:121)

Spring bean只是由Spring容器管理的对象实例,也就是说,它们是由框架创建和连接的,并放入一个"对象包中。 (容器)你可以在那里得到它们。

"布线"部分存在依赖注入的全部内容,它意味着你只能说"我将需要这个东西"并且框架将遵循一些规则来为您提供正确的实例。

对于那些不习惯Spring的人,我认为Wikipedia Spring's article has a nice description

  

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

     

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

     

可以通过依赖查找或获取对象   依赖注入依赖关系查找是调用者的模式   向容器对象询问具有特定名称或a的对象   具体类型。 依赖注入是容器的模式   通过任一构造函数将对象按名称传递给其他对象,   属性或工厂方法。

答案 2 :(得分:30)

首先让我们了解一下Spring:

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

<强>打个比方:
enter image description here

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

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

enter image description here

与豆类生命周期一样,春豆也具有自己的生命周期。

enter image description here

enter image description here

img source

Following is sequence of a bean lifecycle in Spring:

  • 实例化:首先,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方法声明,则调用指定的初始化方法。

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

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

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

答案 3 :(得分:21)

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

您以某种方式连接bean,这样您就不必处理实例化或评估对bean的任何依赖性。这通常被称为Dependency Injection

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

答案 4 :(得分:8)

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

Here is the detail URI where you got more information about Beans

答案 5 :(得分:8)

Bean是POJO(普通Java对象),由spring容器管理。

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

@Bean批注返回一个对象,该对象在应用程序上下文中弹簧注册为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();
}

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

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

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

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

答案 6 :(得分:5)

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

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

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

  • 接线意味着我们手动将其配置为XML文件。

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

答案 7 :(得分:4)

Spring bean是类。您可以从应用程序上下文中获取实例作为类new的实例,而不是实例化类(使用bean),其中bean是您在应用程序上下文配置中配置的。这样,整个应用程序在整个应用程序中维护单一范围的实例。在实例化应用程序上下文之后,立即按照其配置顺序初始化所有bean。即使您没有在应用程序中获取任何bean,也会在创建应用程序上下文后立即创建所有Bean实例。

答案 8 :(得分:2)

在Spring中,那些构成应用程序主干并由Spring IoC管理的对象 容器被称为bean。 bean只是一个实例化,组装和其他的对象 由Spring IoC容器管理;

答案 9 :(得分:1)

  

对于Spring,所有对象都是bean! Spring Framework的基本步骤是将对象定义为bean。 Bean只不过是Spring框架通过查看类定义而创建的对象实例。这些定义基本上形成配置元数据。然后,框架会根据此配置元数据创建一个需要实例化对象的计划,需要设置和注入哪些依赖项,新创建的实例的范围等。

     

元数据可以在简单的XML文件中提供,就像第一章一样。或者,可以将元数据提供为注释或Java配置。

预订: Just Spring

答案 10 :(得分:1)

对于Spring引导应用程序而言, bean 只是Java对象,由Java框架在应用程序启动时创建。

对象的用途几乎可以是任何东西-配置,服务,数据库连接工厂等。-Spring并不在乎。

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

答案 11 :(得分:0)

Spring的XML配置由Bean组成,并且Bean基本上是类。它们只是我们在ApplicationContext内部使用的POJO。可以将定义Bean视为替换关键字new。因此,无论您在应用程序中使用关键字new的何处,都是类似

MyRepository myRepository =new MyRepository ();

使用该关键字 new 的地方,您可以查看删除该配置并将其放入XML文件中。 因此,我们将这样编写代码:

<bean name="myRepository " 
      class="com.demo.repository.MyRepository " />

现在,我们可以简单地使用Setter注入/构造器注入。我正在使用Setter注入。

public class MyServiceImpl implements MyService {
    private MyRepository myRepository;
    public void setMyRepository(MyRepository myRepository)
        {
    this.myRepository = myRepository ;
        }
public List<Customer> findAll() {
        return myRepository.findAll();
    }
}
相关问题