Przykłady.
Podczas definiowania <bean> masz możliwość zadeklarowania zakresu dla tego beana. Na przykład, aby zmusić Springa do tworzenia nowej instancji beana za każdym razem, gdy jest ona potrzebna, powinieneś zadeklarować atrybut scope beana jako prototype. Podobnie, jeśli chcesz, aby Spring zwracał tę samą instancję beana za każdym razem, gdy jest ona potrzebna, powinieneś zadeklarować atrybut zakresu beana jako singleton.
Ramework Spring obsługuje pięć następujących zakresów, z których trzy są dostępne tylko wtedy, gdy używasz web-aware ApplicationContext.
Sr.No. | Scope & Opis |
---|---|
1 |
singleton To scopes the bean definition to a single instance per Spring IoC container (default). |
2 |
prototype To rozszerza zakres definicji beana do dowolnej liczby instancji obiektu. |
3 |
request To rozszerza zakres definicji beana do żądania HTTP. Ważne tylko w kontekście web-aware Spring ApplicationContext. |
4 | |
5 |
global-session To przypisuje definicję beana do globalnej sesji HTTP. Ważne tylko w kontekście web-aware Spring ApplicationContext. |
W tym rozdziale omówimy dwa pierwsze zakresy, a pozostałe trzy zostaną omówione przy okazji omawiania web-aware Spring ApplicationContext.
Zakres singleton
Jeśli zakres jest ustawiony na singleton, kontener Spring IoC tworzy dokładnie jedną instancję obiektu zdefiniowanego przez tę definicję beana. Ta pojedyncza instancja jest przechowywana w pamięci podręcznej takich singletonowych fasolek, a wszystkie kolejne żądania i odwołania do tego nazwanego beana zwracają zbuforowany obiekt.
Domyślnym zakresem jest zawsze singleton. Jednakże, gdy potrzebujemy jednej i tylko jednej instancji fasoli, możemy ustawić właściwość scope na singleton w pliku konfiguracyjnym fasoli, jak pokazano w poniższym fragmencie kodu –
<!-- A bean definition with singleton scope --><bean id = "..." class = "..." scope = "singleton"> <!-- collaborators and configuration for this bean go here --></bean>
Przykład
Przygotujmy działające Eclipse IDE i wykonajmy następujące kroki, aby stworzyć aplikację Spring aplikacji –
Kroki | Opis |
---|---|
1 | Utwórz projekt o nazwie SpringExample i utwórz pakiet com.tutorialspoint w folderze src w utworzonym projekcie. |
2 | Dodaj wymagane biblioteki Spring używając opcji Add External JARs jak wyjaśniono w rozdziale Spring Hello World Example. |
3 | Utwórz klasy Java HelloWorld i MainApp w pakiecie com.tutorialspoint. |
4 | Utwórz plik konfiguracyjny Beans.xml w folderze src. |
5 | Ostatnim krokiem jest utworzenie zawartości wszystkich plików Java i pliku konfiguracyjnego Bean oraz uruchomienie aplikacji, jak wyjaśniono poniżej. |
Tutaj znajduje się zawartość pliku HelloWorld.java –
package com.tutorialspoint;public class HelloWorld { private String message; public void setMessage(String message){ this.message = message; } public void getMessage(){ System.out.println("Your Message : " + message); }}
Następnie znajduje się zawartość pliku MainApp.java –
package com.tutorialspoint;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class MainApp { public static void main(String args) { ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml"); HelloWorld objA = (HelloWorld) context.getBean("helloWorld"); objA.setMessage("I'm object A"); objA.getMessage(); HelloWorld objB = (HelloWorld) context.getBean("helloWorld"); objB.getMessage(); }}
Poniżej znajduje się plik konfiguracyjny Beans.xml wymagany dla zakresu singleton –
<?xml version = "1.0" encoding = "UTF-8"?><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 = "helloWorld" class = "com.tutorialspoint.HelloWorld" scope = "singleton"> </bean></beans>
Jak już skończysz tworzyć pliki źródłowe i konfiguracyjne beanów, uruchommy aplikację. Jeśli wszystko jest w porządku z twoją aplikacją, to wydrukuje ona następujący komunikat –
Your Message : I'm object AYour Message : I'm object A
Zakres prototypowy
Jeśli zakres jest ustawiony na prototypowy, kontener Spring IoC tworzy nową instancję obiektu bean za każdym razem, gdy pojawia się żądanie dotyczące tego konkretnego beana. Z reguły należy używać zakresu prototypowego dla wszystkich beanów pełnostanowych oraz zakresu singletonowego dla beanów bezstanowych.
Aby zdefiniować prototypowy zakres, można ustawić właściwość scope na prototype w pliku konfiguracyjnym beana, jak pokazano w poniższym fragmencie kodu –
<!-- A bean definition with prototype scope --><bean id = "..." class = "..." scope = "prototype"> <!-- collaborators and configuration for this bean go here --></bean>
Przykład
Przygotujmy działające Eclipse IDE i wykonajmy następujące kroki, aby stworzyć aplikację Spring aplikacji –
Kroki | Opis |
---|---|
1 | Utwórz projekt o nazwie SpringExample i utwórz pakiet com.tutorialspoint w folderze src w utworzonym projekcie. |
2 | Dodaj wymagane biblioteki Spring używając opcji Add External JARs jak wyjaśniono w rozdziale Spring Hello World Example. |
3 | Utwórz klasy Java HelloWorld i MainApp w pakiecie com.tutorialspoint. |
4 | Utwórz plik konfiguracyjny Beans.xml w folderze src. |
5 | Ostatnim krokiem jest utworzenie zawartości wszystkich plików Java i pliku konfiguracyjnego Bean oraz uruchomienie aplikacji, jak wyjaśniono poniżej. |
Tutaj znajduje się zawartość pliku HelloWorld.java
package com.tutorialspoint;public class HelloWorld { private String message; public void setMessage(String message){ this.message = message; } public void getMessage(){ System.out.println("Your Message : " + message); }}
Poniżej znajduje się zawartość pliku MainApp.java –
package com.tutorialspoint;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class MainApp { public static void main(String args) { ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml"); HelloWorld objA = (HelloWorld) context.getBean("helloWorld"); objA.setMessage("I'm object A"); objA.getMessage(); HelloWorld objB = (HelloWorld) context.getBean("helloWorld"); objB.getMessage(); }}
Poniżej znajduje się plik konfiguracyjny Beans.xml wymagany dla prototypu zakresu –
<?xml version = "1.0" encoding = "UTF-8"?><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 = "helloWorld" class = "com.tutorialspoint.HelloWorld" scope = "prototype"> </bean></beans>