@Order annotation trong Spring, Spring Boot

Trong hướng dẫn này, chúng ta sẽ tìm hiểu về @Order annotation của Spring được dùng để sắp xếp thứ tự của một component hoặc bean trong Spring.

@Order có một tham số đầu vào dùng để chỉ định thứ tự của một component. Mặc định giá trị này sẽ là Ordered.LOWEST_PRECEDENCE. Nó sẽ đánh dấu một component có độ ưu tiên thấp so với tất cả các component được chú thích @Order khác.

Tương tự, giá trị Ordered.HIGHEST_PRECEDENCE có thể sử dụng để đánh dấu một component có độ ưu tiên cao hơn so với các component được sắp xếp khác.

Khi nào sử dụng @Order annotation

Trước phiên bảng Spring 4.0, @Order annotation chỉ được sủ dụng cho các lệnh thực thi AspectJ. Kể từ Spring 4.0, nó đã hỗ trợ cho cả việc injection các component và collection. Kết qủa là spring đã tiêm các bean có cùng kiểu dữ liệu dựa trên thứ tự được định nghĩa trong @Order.

Giả sử  mình có một Rating interface.

public interface Rating {
    int getRating();
}

Và 3 implementation triển khai từ Rating interface.

@Component
@Order(1)
public class Excellent implements Rating {

    @Override
    public int getRating() {
        return 1;
    }
}

@Component
@Order(2)
public class Good implements Rating {

    @Override
    public int getRating() {
        return 2;
    }
}

@Component
@Order(Ordered.LOWEST_PRECEDENCE)
public class Average implements Rating {

    @Override
    public int getRating() {
        return 3;
    }
}

Trong đó class Average sẽ có độ ưu tiên thấp nhất vì gía trị của nó là LOWEST_PRECEDENCE.

Để kiểm tra thứ tự của các component được tạo chúng ta có thể viết một unit-test đơn giản sau:

public class RatingRetrieverUnitTest { 
    
    @Autowired
    private List<Rating> ratings;
    
    @Test
    public void givenOrder_whenInjected_thenByOrderValue() {
        assertThat(ratings.get(0).getRating(), is(equalTo(1)));
        assertThat(ratings.get(1).getRating(), is(equalTo(2)));
        assertThat(ratings.get(2).getRating(), is(equalTo(3)));
    }
}

Kết bài

Chúng tôi đã tìm hiểu về chú thích @Order trong bài viết ngắn này. Chúng ta có thể tìm thấy ứng dụng của @Order trong các trường hợp sử dụng khác nhau – trong đó thứ tự của các component rất quan trọng. Ví dụ như Spring request Filter, chúng ta cần xác định rõ những Filter nào được chạy trước, Filter nào chạy sau để đảm bảo tính đúng đắn cho chương trình.

 

5 1 vote
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x