@Component annotation và @Autowired annotation

0 phút đọc

Trong lập trình Spring Boot, Annotation @Component@Autowired là hai trong những khái niệm quan trọng giúp quản lý và tiêm các thành phần (component) vào ứng dụng của bạn. Bài viết này sẽ giúp bạn hiểu rõ hơn về hai annotation này.

Giới thiệu

Trước khi tìm hiểu về @Component@Autowired, bạn nên nắm vững hai khái niệm quan trọng sau đây:

  1. Tight coupling (liên kết ràng buộc) và loose coupling (liên kết lỏng lẻo): Tight coupling là sự phụ thuộc mạnh giữa các thành phần trong ứng dụng, trong khi loose coupling là sự phụ thuộc yếu hoặc không phụ thuộc giữa các thành phần.

  2. Dependency Injection (DI) và Inversion of Control (IoC): DI là một nguyên tắc trong lập trình, nói rằng các thành phần không nên tạo ra các đối tượng phụ thuộc của chúng, mà nên nhận chúng từ bên ngoài. IoC là một nguyên tắc quản lý và cung cấp các đối tượng phụ thuộc.

Cài đặt

Trước tiên, bạn cần cài đặt các gói thư viện của Spring Boot trong Maven. Để làm điều này, bạn cần thêm spring-boot-starter-parent là parent của project và thêm dependency spring-boot-starter-web cho việc lập trình web hoặc server side. Dưới đây là ví dụ cấu hình pom.xml:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.5.RELEASE</version>
    <relativePath /> <!-- lookup parent from repository -->
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

Cách chạy ứng dụng Spring Boot

Trong Spring Boot, để chạy ứng dụng, bạn cần chỉ cho Spring Boot biết nơi ứng dụng bắt đầu. Điều này được thực hiện bằng cách thêm annotation @SpringBootApplication trên class chính và gọi SpringApplication.run(App.class, args); để khởi tạo ứng dụng. Ví dụ:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;

@SpringBootApplication
public class App {
    public static void main(String[] args) {
        ApplicationContext context = SpringApplication.run(App.class, args);
    }
}

Trong ví dụ trên, chúng ta đã tạo một ứng dụng Spring Boot và khởi tạo ApplicationContext, container chứa toàn bộ các dependency trong ứng dụng.

Annotation @Component trong Spring Boot

@Component là một annotation đánh dấu trên các class để cho biết chúng là các bean được quản lý bởi Spring Boot. Điều này có nghĩa là Spring Boot sẽ tạo và quản lý các instance của các class được đánh dấu @Component.

Ví dụ:

import org.springframework.stereotype.Component;

@Component
public class Bikini implements Outfit {
    @Override
    public void wear() {
        System.out.println("Mặc bikini");
    }
}

Trong ví dụ trên, Bikini được đánh dấu là một @Component, nên Spring Boot sẽ tạo một instance của Bikini và quản lý nó.

Annotation @Autowired trong Spring Boot

@Autowired được sử dụng để tiêm (inject) các dependency vào các thành phần khác. Khi bạn đánh dấu một thuộc tính bằng @Autowired, Spring Boot sẽ tự động tiêm một instance của dependency tương ứng vào thuộc tính đó.

Ví dụ:

import org.springframework.beans.factory.annotation.Autowired;

@Component
public class Girl {

    @Autowired
    Outfit outfit;

    // Các getter và setter
}

Trong ví dụ trên, Girl có m

ột thuộc tính outfit được đánh dấu bằng @Autowired. Khi Spring Boot tạo một instance của Girl, nó sẽ tiêm một instance của Outfit (trong trường hợp này là Bikini) vào thuộc tính outfit.

Singleton

Một điều đặc biệt là các bean trong Spring Boot được quản lý bởi ApplicationContext đều là singleton. Điều này có nghĩa là chỉ có một instance duy nhất của mỗi bean và nó được chia sẻ giữa các thành phần khác nhau. Điều này có thể thấy từ ví dụ sau:

ApplicationContext context = SpringApplication.run(App.class, args);

Outfit outfit = context.getBean(Outfit.class);
Girl girl = context.getBean(Girl.class);

System.out.println("Outfit Instance: " + outfit);
System.out.println("Girl Outfit: " + girl.outfit);

Cả outfitgirl.outfit đều trỏ vào cùng một instance của Bikini.

Avatar TechMely Team
Được viết bởi

TechMely Team

Cuộc sống quan trọng nhất là sự lựa chọn.