VietTuts

Tự Học Lập Trình Online

  • Home
  • Java
  • Servlet
  • JSP
  • Struts2
  • Hibernate
  • Spring
  • MyBatis
  • Java WS
  • C
  • C++
  • C#
  • Python
  • PHP
  • Excel
  • VBA
  • Web
    • JavaScript
    • JQUERY
    • JSON
    • AJAX
    • CSS
    • HTML
    • HTML5
    • Node.js
    • Angular 7
  • SQL
    • MySQL
    • SQL Server
  • Misc
    • Eclipse
    • Phần mềm tiện ích
    • Cấu trúc DL&GT
    • Selenium Test

Spring Tuts

Spring là gì? Kiến trúc Spring Spring - Thiết lập môi trường Spring HelloWorld Example Dependency Injection trong Spring IoC Containers trong Spring Định nghĩa Bean trong Spring Phạm vi của Bean trong Spring Vòng đời của Bean trong Spring Spring - Kế thừ Bean Spring - Inner Bean Spring - Injecting Collection Spring - Beans Auto-Wiring Annotation Based Configuration Spring - Java Based Configuration Spring - Event Handling in Spring Spring - Custom Events in Spring Spring - AOP with Spring Framework Spring - JDBC Framework Spring - Transaction Management Spring - Web MVC Framework Spring - Logging with Log4J

Spring Tool

Cài đặt Spring Tool Suite (STS) trong Eclipse Tạo Spring project bằng Spring Tool Suite trong Eclipse Tạo Spring project (annotation) bằng Spring Tool Suite (STS)

Spring 4 Example

Ví dụ login trong Spring 4 Web MVC – Hibernate 4 XML Mapping Ví dụ login trong Spring 4 Web MVC – Hibernate 4 Annotation
1 / 3
❮ ❯

Phạm vi của Bean trong Spring


Spring Framework là gì?
Spring Beans Auto-wiring Example (XML)

Bài này chúng ta sẽ tìm hiểu về phạm vi của bean trong Spring. Khi định nghĩa một bean trong Spring, bạn có các tùy chọn để khai báo phạm vi của bean đó. Ví dụ, bạn muốn Spring tạo ra một bean mới khi cần thiết thì 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 bean (bean duy nhất) khi cần thiết, 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 khi được sử dụng một ứng dụng Spring Web.

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

singleton

Đây là phạm vi mặc định, phạm vi này nói với Spring IoC container rằng chỉ tạo ra một thể hiện duy nhất của bean này trên toàn bộ dứng dụng.
2

prototype

Phạm vi này nói với Spring IoC container rằng tạo ra một thể hiện mới của bean mỗi khi cần thiết.
3

request

Phạm vi này định nghĩa một bean cho một HTTP request. Chỉ có giá trị trong ngữ cảnh của một ứng dụng Spring Web.
4

session

Phạm vi này định nghĩa một bean cho một HTTP session. Chỉ có giá trị trong ngữ cảnh của một ứng dụng Spring Web.
5

global-session

Phạm vi này định nghĩa một bean cho một global HTTP session. Chỉ có giá trị trong ngữ cảnh của một ứng dụng Spring Web.

Trong bài này chúng ta sẽ tìm hiểu về 2 phạm vi singleton và prototype, còn request, session và global-session sẽ được tìm hiểu trong các bài học về Spring Web.


Nội dung chính

  • Phạm vi Singleton
    • Ví dụ về phạm vi Singleton
  • Phạm vi Prototype
    • Ví dụ về phạm vi prototype

Phạm vi Singleton

Nếu phạm vi của bean được thiết lập là singleton, Spring IoC container tạo ra chính xác một thể hiện của đối tượng được xác định bởi định nghĩa của bean đó. Đối tượng này được lưu trữ trong một bộ nhớ cache, và tất cả các yêu cầu tiếp theo mà tham chiếu đến bean đó thì đối tượng lưu trữ được trả về.

Phạm vi mặc định luôn là singleton. Tuy nhiên, bạn có thể thiết lập thuộc tính scope thành singleton trong tệp tin cấu hình bean, như được trình bày trong đoạn mã sau đây.

<!-- Một định nghĩa bean với singleton scope -->
<bean id = "..." class = "..." scope = "singleton">
    <!-- Cấu hình bean tại đây -->
</bean>

Ví dụ về phạm vi Singleton

Tạo một ứng dụng Spring trong Eclipse như trong ví dụ tạo Maven project trong Eclipse.

Tạo package có tên vn.viettuts trong thư mục src.

Add thư viện Spring cần thiết vào project bằng cách thêm các dependency sau vào file pom.xml. Sau đó update project.

<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>4.3.6.RELEASE</version>
    <scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>4.3.6.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>4.3.6.RELEASE</version>
</dependency>

Tạo lớp HelloWorld.java

package vn.viettuts;

public class HelloWorld {
    private String message;

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

    public void getMessage() {
        System.out.println("Your Message : " + message);
    }
}

Tạo tập tin cấu hình Beans.xml tại thư mục src

<?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="vn.viettuts.HelloWorld" scope="singleton">
    </bean>

</beans>

Tạo lớp MainApp.java

package vn.viettuts;

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");
        
        // tạo đối tượng objA
        HelloWorld objA = (HelloWorld) context.getBean("helloWorld");
        objA.setMessage("I'm object A");
        objA.getMessage();

        // tạo đối tượng objB, objB được tham chiếu đến đối tượng Singleton
        HelloWorld objB = (HelloWorld) context.getBean("helloWorld");
        objB.getMessage();
    }
}

Kết quả:

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


Phạm vi Prototype

Nếu phạm vi được thiết lập là prototype, Spring IoC container tạo ra một thể hiện bean mới của đối tượng mỗi khi được yêu cầu.

Để định nghĩa phạm vi prototype, bạn có thể thiết lập thuộc tính scope thành prototype trong tệp tin cấu hình bean, như thể hiện trong đoạn mã sau đây:

<!-- Một định nghĩa bean với singleton scope -->
<bean id = "..." class = "..." scope = "prototype">
    <!-- Cấu hình bean tại đây -->
</bean>

Ví dụ về phạm vi prototype

Tạo ra ứng dụng tương tự như trên, và chỉ cần thay đổi thuộc tính scope của bean helloWorld thành prototype trong tệp tin cấu hình Beans.xml như sau:

<?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="vn.viettuts.HelloWorld" scope="prototype">
    </bean>

</beans>

Kết quả:

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

Kết quả lần sau bằng null cho thấy một thể hiện mới của bean helloWorld được tạo ra.


Spring Framework là gì?
Spring Beans Auto-wiring Example (XML)

Recent Updates

Sắp Tết 2024 Rồi! - Còn bao nhiêu ngày nữa là đến tết 2024?SpringLayout trong Java SwingMyBatis Example - MyBatis + SpringSpring là gì?Cài đặt Spring Tool Suite (STS) trong EclipseDependency Injection trong SpringĐịnh nghĩa Bean trong SpringInjecting Collection trong SpringInner Bean trong SpringIoC Container trong SpringKế thừa Bean trong SpringKiến trúc SpringPhạm vi của Bean trong Spring

VietTuts on facebook

Học Lập Trình Online Miễn Phí - VietTuts.Vn
Danh Sách Bài Học

Học Java | Hibernate | Spring
Học Excel | Excel VBA
Học Servlet | JSP | Struts2
Học C | C++ | C#
Học Python
Học SQL

Bài Tập Có Lời Giải

Bài tập Java
Bài tập C
Bài tập C++
Bài tập C#
Bài tập Python
Ví dụ Excel VBA

Câu Hỏi Phỏng Vấn

201 câu hỏi phỏng vấn java
25 câu hỏi phỏng vấn servlet
75 câu hỏi phỏng vấn jsp
52 câu hỏi phỏng vấn Hibernate
70 câu hỏi phỏng vấn Spring
57 câu hỏi phỏng vấn SQL

Scroll back to top

Copyright © 2016 VietTuts.Vn all rights reserved. | Liên hệ | Chính sách - riêng tư | sitemap.html | sitemap_index.xml