sách gpt4 ăn đã đi

Các kịch bản sử dụng và phân tích mã nguồn của chú thích @Conditional thường được sử dụng của Spring

In lại Tác giả: Tôi là chú chim nhỏ Thời gian cập nhật: 2023-04-14 22:31:47 34 4
mua khóa gpt4 giày nike

Xin chào, tôi là Lưu Phái! .

giới thiệu

Điều tôi muốn chia sẻ hôm nay là @Conditional của Spring là một chú thích có điều kiện. Chức năng của nó là xác định xem Bean có đáp ứng các điều kiện hay không. không được đáp ứng, Bean sẽ không được đăng ký. Chú thích này đã tạo ra nhiều chú thích trong SpringBoot, chẳng hạn như @ConditionalOnProperty, @ConditionalOnBean, @ConditionalOnClass. Đợi đã, những chú thích này được sử dụng rất nhiều trong SpringBoot.

Kịch bản dịch vụ tệp

Dưới đây chúng tôi trình bày một số cách sử dụng @Conditional. Trong phát triển phần mềm, hệ thống tệp là cần thiết, nhưng đặc điểm của hệ thống là khác nhau. lần này, Tệp có thể được lưu trên đám mây hoặc trên hệ thống tệp tự xây dựng. Để đáp ứng nhu cầu của những người dùng khác nhau, phần mềm của chúng tôi phải có khả năng thích ứng với các môi trường khác nhau và chỉ yêu cầu cấu hình đơn giản.

Giả sử rằng trong quá trình phát triển của chúng tôi, tất cả các tệp của chúng tôi được lưu trữ trên OSS của nhà cung cấp dịch vụ đám mây và logic mã không dự trữ các tiện ích mở rộng. Sau đó, khi người dùng cần triển khai riêng tư, chúng tôi có thể cần thay đổi logic ở phía lưu trữ tệp. như thế này Thiết kế không hợp lý.

Hãy suy nghĩ về điều này. Logic mã của việc lưu trữ tệp là khác nhau. Phương pháp triển khai và API của mỗi hệ thống tệp là khác nhau, nhưng chúng có một điểm chung, đó là chúng có thể tải tệp lên và tải xuống tệp, vì vậy chúng ta nên tóm tắt một Có nhiều cách triển khai giao diện chung bên dưới. Ví dụ: logic tải lên và tải xuống tệp của Minio được triển khai bằng API Minio, FastDFS sử dụng FastDFS và OSS sử dụng OSS. Dưới đây chúng tôi sẽ viết mã tương ứng.

Thực hiện mã hóa

Sau đây là giải pháp triển khai cách ly logic các hệ thống tệp khác nhau thông qua mã hóa và cung cấp giao diện thống nhất. Nói chung, chúng tôi sẽ ghi thông tin cấu hình vào tệp cấu hình, sử dụng storageType để thể hiện loại lưu trữ tệp.

Giao diện tải tập tin lên

Trong giao diện StorageService, chỉ có hai phương thức init() và put() được xác định đơn giản. init() là thực hiện một số thao tác khởi tạo, chẳng hạn như cấu hình tham số, kết nối, v.v. và put() là giao diện tải tệp lên.

                        
                          /** * Mô tả chức năng: Giao diện tải tệp lên* 

* Bản gốc @Author: Steakliu-Liu Pai, 2023-04-03 09:54 *

*/ giao diện công cộng StorageService { /** * Khởi tạo lưu trữ tệp* / void init(); /** * Tải tệp lên* tệp @param */ void put(tệp MultipartFile }

Triển khai hệ thống tệp cụ thể

Sau đây là cách triển khai cụ thể của Minio. Chú thích @Conditional được sử dụng trên lớp và giá trị là MinioStorageCondition.

                        
                          @Component @Conditional(value = MinioStorageCondition.class) public class MinioStorageService implements StorageService { @Override public void init() { // Không thể thực hiện được } @Override public void put(MultipartFile file) { } }

                        
                      

MinioStorageĐánh giá điều kiện

Chức năng của MinioStorageCondition là xác định xem các điều kiện có khớp hay không. Nó triển khai giao diện Điều kiện. Để sử dụng @Conditional, lớp phán đoán của nó phải triển khai giao diện Điều kiện, sau đó triển khai logic phương thức khớp. Sau đây là để xác định xem storageType có phải là minio hay không. Nếu là minio thì return Nếu đúng nghĩa là Bean MinioStorageService sẽ được tạo, nếu sai thì sẽ không được tạo.

                        
                          lớp công khai MinioStorageCondition triển khai Điều kiện { @Ghi đè boolean công khai matches(ConditionContext context, AnnotatedTypeMetadata metadata) { Chuỗi storageType = context.getEnvironment().getProperty("storageType"); trả về "minio".equals(storageType); } }

                        
                      

Phân tích mã nguồn

Khi spring quét một Bean, nó sẽ xác định xem Bean tương ứng có chú thích @Conditional hay không. Nếu có, nó sẽ nhập lớp vào giá trị để xác định xem nó có đáp ứng các điều kiện hay không, nó sẽ trả về true và bạn có thể làm được. register. Trên thực tế, nếu nó đáp ứng các điều kiện thì BeanDefinition có thể được đăng ký vào BeanFactory. Nếu nó không đáp ứng được các điều kiện thì đương nhiên nó sẽ không được đăng ký.

Sau đây là sơ đồ thời gian của mã nguồn.

Như có thể thấy từ sơ đồ trình tự ở trên, có khá nhiều lớp tham gia vào toàn bộ quá trình, nhưng đây không phải là quá trình hoàn chỉnh. Nó chỉ bắt đầu bằng việc quét các lớp. Spring sẽ quét các lớp theo đường dẫn này. có thể được chỉ định thông qua @ComponentScan, nếu đó là dự án SpringBoot thì Đối với dự án hiện tại, sau đó lọc ra các Bean cần đăng ký và đăng ký chúng trong BeanFactory. Đối với các lớp được đánh dấu bằng chú thích @Conditional, chúng sẽ nhập lớp giá trị trong @Conditional, chính là MinioStorageCondition ở trên. Hoặc FastDFSStorageCondition, sau đó khớp. Những trường hợp không đáp ứng điều kiện sẽ không được đăng ký.

Quy trình cụ thể của @Conditional cũng tương đối đơn giản nên mình sẽ không đi chi tiết từng cái một. Bạn có thể xem sơ đồ thời gian ở trên để biết cách triển khai mã nguồn.

Tóm tắt

Trên đây là phần giới thiệu ngắn gọn về cách sử dụng và các nguyên tắc của @Conditional. Chú thích @Conditional được sử dụng khá thường xuyên trong SpringBoot, đặc biệt là một số chú thích bắt nguồn từ nó. hầu như luôn sử dụng các chú thích có nguồn gốc @Conditional và @Conditional. Chúng tôi sẽ chọn một số chú thích sau.

Đó là chia sẻ của ngày hôm nay, cảm ơn bạn đã xem, hẹn gặp lại lần sau! .

Cuối cùng, bài viết này về các kịch bản sử dụng và phân tích mã nguồn của chú thích @Conditional được sử dụng rất phổ biến của Spring kết thúc tại đây. Nếu bạn muốn biết thêm về các kịch bản sử dụng và phân tích mã nguồn của chú thích @Conditional được sử dụng rất phổ biến của Spring, vui lòng tìm kiếm các bài viết của CFSDN. hoặc tiếp tục duyệt các bài viết liên quan, tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .

34 4 0
tôi là một con chim nhỏ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress