Java >> Java tutorial >  >> Tag >> Spring

Eksempel på Spring Bean Scopes

Mens du definerer Spring Bean vi har muligheder for at definere scopes for hver bønne. Forår understøtter 5 bønneskoper.

  1. singleton – Dette omfang returnerer en enkelt bønneforekomst pr. Forår IoC-beholder (Standardomfang)
  2. prototype – Dette omfang returnerer en ny bønneforekomst hver gang
  3. anmodning – Dette omfang returnerer en enkelt bean-instans for hver HTTP-anmodning.
  4. session – Dette omfang returnerer en enkelt bønneforekomst for hver HTTP-session.
  5. globalSession – Dette omfang returnerer en enkelt bean-instans for hver global HTTP-session.

De sidste tre omfang (anmodning, session, globalSession) kan kun bruges med web-bevidst ApplicationContext.

Vi vil lære lidt mere om singleton og prototype omfang i denne artikel

Mappestruktur:

  1. Opret en ny Java  Projekt SpringCoreTutorial” og opret en pakke til vores src-filer com.javainterviewpoint "
  2. Tilføj de nødvendige biblioteker til byggestien. Java Build Path ->Biblioteker ->Tilføj eksterne JAR'er og tilsæt nedenstående krukker.

    commons-logging-1.1.1.jar
    spring-beans-3.2.9.RELEASE.jar
    spring-core-3.2.9.RELEASE.jar
    spring-context-3.2.9.RELEASE.jar
    spring-expression-3.2.9.RELEASE.jar

  3. Opret Java-klasserne bog. java og ClientLogic.java under  com.javainterviewpoint mappe.
  4. Placer vores konfigurationsfil SpringConfig.xml i kilden mappe

Book.java

Bogklassen vil have alle bogdetaljer såsom titel, forfatter, publikationer  og dens tilsvarende POJO'er. getBookDetails() metoden viser de bogoplysninger, der er indstillet.

package com.javainterviewpoint;

public class Book 
{
    private String title;
    private String author;
    private String publications;
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getAuthor() {
        return author;
    }
    public void setAuthor(String author) {
        this.author = author;
    }
    public String getPublications() {
        return publications;
    }
    public void setPublications(String publications) {
        this.publications = publications;
    }
    public void getBookDetails(String book)
    {
        System.out.println("**Published "+book+" Details**");
        System.out.println("Book Title        : "+title);
        System.out.println("Book Author       : "+author);
        System.out.println("Book Publications : "+publications);
    }
}

ClientLogic.java

package com.javainterviewpoint;

import java.util.Iterator;
import java.util.Set;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

public class ClientLogic
{
    public static void main(String args[])
    {
        //Read the configuration file
        Resource resource = new ClassPathResource("SpringConfig.xml");
        //Read all the bean definition
        BeanFactory bf = new XmlBeanFactory(resource);
        
        //Get the book1 Instance
        Book book1 = (Book)bf.getBean("book");
        book1.setTitle("Core Spring");
        book1.setAuthor("Java Interview Point");
        book1.setPublications("JIP");
        //Printing book1 details
        book1.getBookDetails("book1");
        
        //Getting book2 instance
        Book book2 = (Book)bf.getBean("book");
      //Printing book2 details
        book2.getBookDetails("book2");
    }
}
  • Ressource klasse læser vores konfigurationsfil(SpringConfig.xml)
  • BeanFactory klasse læste alle bønnedefinitionerne nævnt i konfigurationsfilen.
  • Hent bogen Klasseforekomst ved at kalde getBean() metode over bønnefabrikken(bog1 og bog2 ).
  • Strengen blev sendt til getBean() metode skal svare til id defineret i SpringConfig.xml
  • Vi indstiller værdier til attributter ved hjælp af bog1 forekomst og kald getBookDetails() metode med både bog1 og bog2 forekomster.

Singleton Scope

SpringConfig.xml

I vores konfigurationsfil har vi defineret omfanget som "singleton"

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <bean id="book" class="com.javainterviewpoint.Book" scope="singleton"></bean>
</beans>

Output:
Når vi kører vores ClientLogic-klasse, får vi nedenstående output

**Published book1 Details**
Book Title        : Core Spring
Book Author       : Java Interview Point
Book Publications : JIP
**Published book2 Details**
Book Title        : Core Spring
Book Author       : Java Interview Point
Book Publications : JIP

Selvom vi ikke har angivet værdier for bog2 forekomst vil vi få de værdier, som er indstillet for bog1 , som singleton scope er enkelt bønneforekomst pr. Spring IoC-beholder. Det er noget som statisk variabel i java

Prototype-omfang

SpringConfig.xml

Vi vil definere omfang som "prototype"  fra Book bønne

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <bean id="book" class="com.javainterviewpoint.Book" scope="prototype"></bean>
</beans>

Output:
Når vi kører vores ClientLogic-klasse, får vi nedenstående output

**Published book1 Details**
Book Title        : Core Spring
Book Author       : Java Interview Point
Book Publications : JIP
**Published book2 Details**
Book Title        : null
Book Author       : null
Book Publications : null

Her fik vi bog2 detaljer som null som vi har brugt prototype scope, som opretter en ny bønneinstans hver gang.


Java tag