Spring - Bean Scopes

Khi xác định một <bean>, bạn có tùy chọn khai báo phạm vi cho bean đó. Ví dụ: để buộc Spring tạo ra một thể hiện bean mới mỗi khi cần một phiên bản bean, bạn nên khai báo thuộc tính phạm vi của bean làprototype. Tương tự như vậy, nếu bạn muốn Spring trả về cùng một cá thể bean mỗi khi cần, bạn nên khai báo thuộc tính phạm vi của bean làsingleton.

Spring Framework hỗ trợ năm phạm vi sau, ba trong số đó chỉ khả dụng nếu bạn sử dụng ApplicationContext nhận biết web.

Sr.No. Phạm vi & Mô tả
1

singleton

Điều này phạm vi định nghĩa bean thành một thể hiện duy nhất cho mỗi vùng chứa Spring IoC (mặc định).

2

prototype

Điều này bao gồm một định nghĩa bean đơn lẻ để có bất kỳ số lượng cá thể đối tượng nào.

3

request

Điều này bao gồm một định nghĩa bean cho một yêu cầu HTTP. Chỉ hợp lệ trong ngữ cảnh của Spring ApplicationContext nhận biết web.

4

session

Điều này bao gồm một định nghĩa bean cho một phiên HTTP. Chỉ hợp lệ trong ngữ cảnh của Spring ApplicationContext nhận biết web.
5

global-session

Điều này bao gồm một định nghĩa bean cho một phiên HTTP toàn cầu. Chỉ hợp lệ trong ngữ cảnh của Spring ApplicationContext nhận biết web.

Trong chương này, chúng ta sẽ thảo luận về hai phạm vi đầu tiên và ba phạm vi còn lại sẽ được thảo luận khi chúng ta thảo luận về Spring ApplicationContext nhận biết web.

Phạm vi singleton

Nếu một phạm vi được đặt thành singleton, vùng chứa Spring IoC sẽ tạo chính xác một thể hiện của đối tượng được xác định bởi định nghĩa bean đó. Cá thể đơn lẻ này được lưu trữ trong bộ đệm ẩn của các hạt đậu đơn như vậy, và tất cả các yêu cầu và tham chiếu tiếp theo cho hạt đậu có tên đó sẽ trả về đối tượng được lưu trong bộ nhớ cache.

Phạm vi mặc định luôn là singleton. Tuy nhiên, khi bạn cần một và chỉ một phiên bản của bean, bạn có thể đặtscope tài sản để singleton trong tệp cấu hình bean, như được hiển thị trong đoạn mã sau:

<!-- A bean definition with singleton scope -->
<bean id = "..." class = "..." scope = "singleton">
   <!-- collaborators and configuration for this bean go here -->
</bean>

Thí dụ

Hãy để chúng tôi có một IDE Eclipse đang hoạt động tại chỗ và thực hiện các bước sau để tạo một ứng dụng Spring -

Các bước Sự miêu tả
1 Tạo một dự án với tên SpringExample và tạo một gói com.tutorialspoint trongsrc thư mục trong dự án đã tạo.
2 Thêm các thư viện Spring cần thiết bằng cách sử dụng tùy chọn Thêm JAR bên ngoài như được giải thích trong chương Ví dụ về Spring Hello World .
3 Tạo các lớp Java HelloWorldMainApp theo gói com.tutorialspoint .
4 Tạo tệp cấu hình Đậu Beans.xml trongsrc thư mục.
5 Bước cuối cùng là tạo nội dung của tất cả các tệp Java và tệp Cấu hình Bean và chạy ứng dụng như được giải thích bên dưới.

Đây là nội dung của HelloWorld.java tập tin -

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);
   }
}

Sau đây là nội dung của MainApp.java tập tin -

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();
   }
}

Sau đây là tệp cấu hình Beans.xml cần thiết cho phạm vi 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>

Khi bạn đã hoàn tất việc tạo tệp nguồn và tệp cấu hình bean, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau:

Your Message : I'm object A
Your Message : I'm object A

Phạm vi nguyên mẫu

Nếu phạm vi được đặt thành nguyên mẫu, vùng chứa Spring IoC sẽ tạo một thể hiện bean mới của đối tượng mỗi khi yêu cầu cho bean cụ thể đó được thực hiện. Theo quy tắc, hãy sử dụng phạm vi nguyên mẫu cho tất cả các đậu trạng thái đầy đủ và phạm vi singleton cho các hạt không trạng thái.

Để xác định phạm vi nguyên mẫu, bạn có thể đặt scope tài sản để prototype trong tệp cấu hình bean, như được hiển thị trong đoạn mã sau:

<!-- A bean definition with prototype scope -->
<bean id = "..." class = "..." scope = "prototype">
   <!-- collaborators and configuration for this bean go here -->
</bean>

Thí dụ

Hãy để chúng tôi hỗ trợ Eclipse IDE tại chỗ và làm theo các bước sau để tạo một ứng dụng Spring -

Các bước Sự miêu tả
1 Tạo một dự án với tên SpringExample và tạo một gói com.tutorialspoint trongsrc thư mục trong dự án đã tạo.
2 Thêm các thư viện Spring cần thiết bằng cách sử dụng tùy chọn Thêm JAR bên ngoài như được giải thích trong chương Ví dụ về Spring Hello World .
3 Tạo các lớp Java HelloWorldMainApp theo gói com.tutorialspoint .
4 Tạo tệp cấu hình Đậu Beans.xml trongsrc thư mục.
5 Bước cuối cùng là tạo nội dung của tất cả các tệp Java và tệp Cấu hình Bean và chạy ứng dụng như được giải thích bên dưới.

Đây là nội dung của HelloWorld.java tập tin

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);
   }
}

Sau đây là nội dung của MainApp.java tập tin -

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();
   }
}

Sau đây là tệp cấu hình Beans.xml cần thiết cho phạm vi nguyên mẫu -

<?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>

Khi bạn đã hoàn tất việc tạo tệp nguồn và tệp cấu hình bean, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau:

Your Message : I'm object A
Your Message : null