Beispiel für Frühlingsbohnen

Spring Bean Scopes Beispiel

In Spring wird der Bean-Bereich verwendet, um zu entscheiden, welche Art von Bean-Instanz vom Spring-Container zurück an den Aufrufer gesendet werden soll.

5 Arten von Bean Scopes werden unterstützt:

  1. singleton - Gibt eine einzelne Bean-Instanz pro Spring-IoC-Container zurück

  2. prototype - Gibt bei jeder Anforderung eine neue Bean-Instanz zurück

  3. request - Gibt eine einzelne Bean-Instanz pro HTTP-Anforderung zurück. *

  4. session - Gibt eine einzelne Bean-Instanz pro HTTP-Sitzung zurück. *

  5. globalSession - Gibt eine einzelne Bean-Instanz pro globaler HTTP-Sitzung zurück. *

In den meisten Fällen können Sie sich nur mit dem Kernbereich von Spring befassen - Singleton und Prototyp, und der Standardbereich ist Singleton.

P.S * means only valid in the context of a web-aware Spring ApplicationContext

Singleton gegen Prototyp

Hier ist ein Beispiel, das Ihnen zeigt, was der Unterschied zwischen dem Bean-Bereich ist:singleton undprototype.

package com.example.customer.services;

public class CustomerService
{
    String message;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

1. Singleton-Beispiel

Wenn in der Bean-Konfigurationsdatei kein Bean-Bereich angegeben ist, wird standardmäßig Singleton verwendet.



       

Starte es

package com.example.common;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.example.customer.services.CustomerService;

public class App
{
    public static void main( String[] args )
    {
        ApplicationContext context =
         new ClassPathXmlApplicationContext(new String[] {"Spring-Customer.xml"});

        CustomerService custA = (CustomerService)context.getBean("customerService");
        custA.setMessage("Message by custA");
        System.out.println("Message : " + custA.getMessage());

        //retrieve it again
        CustomerService custB = (CustomerService)context.getBean("customerService");
        System.out.println("Message : " + custB.getMessage());
    }
}

Ausgabe

Message : Message by custA
Message : Message by custA

Da sich das Bean "customerService" im Singleton-Bereich befindet, wird beim zweiten Abruf durch "custB" auch die von "custA" festgelegte Nachricht angezeigt, auch wenn es durch eine neue getBean () -Methode abgerufen wird. In Singleton gibt nur eine Instanz pro Spring-IoC-Container dieselbe Instanz zurück, unabhängig davon, wie oft Sie sie mit getBean () abrufen.

2. Prototyp-Beispiel

Wenn Sie eine neue Bean-Instanz "customerService" möchten, verwenden Sie stattdessen jedes Mal, wenn Sie sie aufrufen, den Prototyp.



   

Führen Sie es erneut aus

Message : Message by custA
Message : null

Im Prototypbereich wird für jede aufgerufenegetBean()-Methode eine neue Instanz erstellt.

3. Bean Scopes Annotation

Sie können auch Annotation verwenden, um Ihren Bean-Bereich zu definieren.

package com.example.customer.services;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;

@Service
@Scope("prototype")
public class CustomerService
{
    String message;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

Aktivieren Sie das automatische Scannen von Komponenten



       

Quellcode herunterladen

Laden Sie es herunter -Spring-Bean-Scopes-Example.zip (7 KB)