Spring Boot 4-mikrotjenester og REST-API'er · Lektion

Bean scopes

Singleton-, prototype-, request- og session-scopes.

Lektion 3 af 413 trin

Bean scopes er en gratis Spring Boot 4-mikrotjenester og REST-API'er-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Spring Boot 4-mikrotjenester og REST-API'er, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Spring Boot 4-mikrotjenester og REST-API'er-kurset indeholder 4 lektioner i alt.

Hvad et omfang styrer

En beans omfang bestemmer, hvor mange instanser containeren opretter, og hvor længe hver af dem lever. Standardomfanget og det mest almindelige omfang er singleton.

Det rigtige omfang er vigtigt for tilstand, hukommelse og trådsikkerhed.

Singleton-omfang

Med singleton-omfang opretter containeren præcis én instans pr. ApplicationContext og returnerer den ved hvert indsættelsespunkt. Det er ideelt til tilstandsløse tjenester.

@Service // singleton by default
public class PricingService {
    public BigDecimal price(Order o) { /* stateless */ }
}

Singletons skal være trådsikre

Da én singleton betjener alle samtidige forespørgsler, må den ikke indeholde foranderlig tilstand pr. forespørgsel i felter. Hold singletons tilstandsløse, eller beskyt delt tilstand omhyggeligt.

  • Godt: skrivebeskyttet konfiguration og indsatte samarbejdspartnere
  • Skidt: et foranderligt felt, der opdateres pr. forespørgsel

Prototype-omfang

Prototype-omfang opretter en ny instans hver gang bean’en anmodes om eller indsættes. Brug det til tilstandsfulde hjælpere med kort levetid, som ikke bør deles.

@Component
@Scope("prototype")
public class ReportBuilder {
    private final List<String> rows = new ArrayList<>();
    public void addRow(String r) { rows.add(r); }
}

Fælden med prototype i singleton

Hvis du indsætter en prototype i en singleton via konstruktøren, får du én instans, der gemmes én gang – ikke en ny for hver brug. Singleton’en oprettes kun én gang, så prototypen løses kun én gang.

Sådan får du nye prototyper

Hvis du vil hente en ny prototype hver gang i en singleton, skal du indsætte en ObjectProvider (eller et opslag) og kalde den efter behov.

@Service
public class ReportService {
    private final ObjectProvider<ReportBuilder> builders;
    public ReportService(ObjectProvider<ReportBuilder> builders) {
        this.builders = builders;
    }
    public Report build() {
        ReportBuilder rb = builders.getObject(); // fresh each call
        return rb.toReport();
    }
}

Oversigt over webomfang

I en webapplikation knytter to ekstra omfang en beans levetid til en HTTP-interaktion: request og session. De findes kun, mens en forespørgsel eller session er aktiv.

Forespørgselsomfang

En bean med forespørgselsomfang oprettes én gang pr. HTTP-forespørgsel og kasseres, når den afsluttes. Det er nyttigt til kontekst pr. forespørgsel, f.eks. et korrelations-id eller opsamlede forespørgselsdata.

@Component
@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class RequestContext {
    private String correlationId;
    // getters/setters
}

Sessionsomfang

En bean med sessionsomfang lever under hele brugerens HTTP-session og indeholder tilstand pr. bruger på tværs af flere forespørgsler, f.eks. en indkøbskurv i en server-renderet applikation.

@Component
@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class UserCart {
    private final List<Item> items = new ArrayList<>();
}

Hvorfor scoped proxies bruges

Indsættelse af en kortlivet bean i en langlivet singleton kræver en proxy. Proxyen indsættes én gang, men videresender hvert kald til den korrekte instans for den aktuelle forespørgsel eller session.

Derfor bruger beans med forespørgsels- og sessionsomfang proxyMode = TARGET_CLASS.

Valg af omfang

Retningslinjer:

  • singleton — standard; tilstandsløse delte tjenester
  • prototype — tilstandsfulde hjælpere pr. brug
  • request — kontekst pr. HTTP-forespørgsel
  • session — tilstand pr. bruger på tværs af forespørgsler

Hurtigt tjek

Test din forståelse af omfang.

Opsummering

Omfang styrer antallet af instanser og levetiden.

  • singleton (standard) — én pr. kontekst, hold den tilstandsløs
  • prototype — ny instans pr. anmodning; pas på singleton-fælden
  • request/session — webomfang, der kræver scoped proxies
  • Brug ObjectProvider til nye prototyper i singletons
Gratis at komme i gang

Lær Java med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
24
Lektioner
93

Ofte stillede spørgsmål

Er lektionen “Bean scopes” gratis?

Ja — hele teksten til “Bean scopes” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Spring Boot 4-mikrotjenester og REST-API'er-kurset, skal du opgradere til CoddyKit PRO. Spring Boot 4-mikrotjenester og REST-API'er-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Bean scopes”?

Singleton-, prototype-, request- og session-scopes. Du øver dig i Spring Boot 4-mikrotjenester og REST-API'er med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Spring Boot 4-mikrotjenester og REST-API'er?

Der kræves ingen tidligere erfaring. Spring Boot 4-mikrotjenester og REST-API'er på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “Bean scopes”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Spring Boot 4-mikrotjenester og REST-API'er-lektion?

Ja. Alle Spring Boot 4-mikrotjenester og REST-API'er-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Spring IoC-containeren
  2. Constructor injection kontra field injection
  3. Bean scopes
  4. Lifecycle-callbacks
← Tilbage til Spring Boot 4-mikrotjenester og REST-API'er