- VisualStudio2022
- pprof-Hướng dẫn sử dụng nó trong bản mạng trực tiếp
- Triển khai C# các loại hộp chọn nhiều màu lựa chọn thả xuống, cây lựa chọn nhiều màu lựa chọn thả xuống và các nút tối đa
- [Ghi chú học tập] Cơ sở dữ liệu cấu trúc: cat tree
Springboot tuân theo nguyên tắc quy ước lớn hơn cấu hình nên giải quyết được rất nhiều vấn đề về cấu hình rườm rà. Trên cơ sở đó, cơ chế spi được cung cấp và spring.factories có thể được sử dụng để hoàn thành chức năng lắp ráp tự động của một bộ phận nhỏ.
Trong các kịch bản nghiệp vụ chung, bạn có thể không cần quan tâm đến việc một Bean được đăng ký như thế nào trong Spring container, bạn chỉ cần khai báo Bean cần được đăng ký trong container là @Component, vì Spring sẽ tự động quét Bean để hoàn thành. khởi tạo và tải nó vào thùng chứa bối cảnh mùa xuân.
Tuy nhiên, nếu có sự phụ thuộc giữa một số Bean trong quá trình tải Bean, nghĩa là việc tải Bean A cần đợi cho đến khi Bean B được tải hoặc khi bạn đang phát triển một số phần mềm trung gian và cần hoàn tất quá trình lắp ráp tự động; Nó sẽ khai báo lớp Cấu hình của riêng nó, nhưng bạn có thể gặp phải một số đậu phụ thuộc lẫn nhau. Nếu bạn không kiểm soát nó, bạn có thể gặp lỗi không thể tìm thấy phần phụ thuộc.
Khung công tác Spring không thể tải các đậu theo thứ tự mà logic nghiệp vụ mong đợi nếu không chỉ định rõ ràng thứ tự tải, do đó, khung công tác Spring cần cung cấp khả năng cho các nhà phát triển chỉ định rõ ràng thứ tự tải đậu.
Trước khi nói chính thức về cách kiểm soát thứ tự bốc hàng, tôi xin nói về 2 hiểu lầm:
@Cấu hình
Trong lớp học, @Bean viết ở phía trước có được đăng ký trước không?Điều này không tồn tại trong thời đại XML, không có logic nào cho thấy nếu nó được viết ở phía trước thì nó sẽ được tải trước. Bởi vì xml không được tải dần dần mà tất cả đều được phân tích cú pháp, sau đó thực hiện phân tích và đăng ký phụ thuộc. Trong springboot, quá trình phân tích cú pháp xml thành các đối tượng bên trong spring bị bỏ qua, nhưng phương thức tải không thay đổi đáng kể.
@Đặt hàng
Chú thích này có chắc chắn cho phép kiểm soát thứ tự tải không?Nói đúng ra, không phải tất cả các loại đậu đều có thể được kiểm soát theo trình tự thông qua chú thích @Order. Bởi vì việc thêm chú thích @Order vào một phương thức hoặc lớp thông thường sẽ không có tác dụng.
Vậy loại đậu nào có thể được tải để @Order có thể kiểm soát? Giải thích chính thức:
{@code @Order} xác định thứ tự sắp xếp cho một thành phần được chú thích Kể từ Spring 4.0, thứ tự dựa trên chú thích được hỗ trợ cho nhiều loại thành phần trong Spring, ngay cả đối với việc chèn bộ sưu tập trong đó các giá trị thứ tự của các thành phần mục tiêu được đưa vào. tài khoản ( từ lớp mục tiêu hoặc từ phương thức {@code @Bean} của họ). Mặc dù các giá trị thứ tự như vậy có thể ảnh hưởng đến mức độ ưu tiên tại các điểm tiêm, vui lòng lưu ý rằng chúng không ảnh hưởng đến thứ tự khởi động đơn lẻ, đây là mối quan tâm trực giao được xác định bởi mối quan hệ phụ thuộc và { @code @DependsOn} khai báo (ảnh hưởng đến biểu đồ phụ thuộc được xác định trong thời gian chạy).
Lúc đầu, chú thích @Order được sử dụng để chỉ định mức độ ưu tiên của các khía cạnh sau 4.0, chức năng của nó đã được cải tiến để hỗ trợ việc chèn các bộ sưu tập, chỉ định thứ tự của các hạt trong bộ sưu tập và đặc biệt chỉ ra rằng nó được sử dụng cho một bộ sưu tập. ví dụ đậu. Lệnh này không có hiệu lực. Ba điểm sau đây hiện đang được sử dụng thường xuyên hơn:
@Diện mạo
Lớp chú thíchTrình nghe ứng dụng
Thực hiện thứ tự tải của các lớpDòng lệnhRunner
Thực hiện thứ tự tải của các lớpVui lòng xem phần sau để biết chi tiết cách sử dụng.
@Configuration // Lớp cấu hình sẽ chỉ có hiệu lực khi lớp được chỉ định tồn tại trong đường dẫn lớp. @ConditionalOnClass(name = "com.example.SomeClass") lớp công khai MyConfiguration { // ... }
Chú thích @DependsOn có thể được sử dụng để kiểm soát thứ tự tạo các hạt đậu. Chú thích này được sử dụng để khai báo rằng hạt đậu hiện tại phụ thuộc vào một hạt đậu khác. Các đậu phụ thuộc sẽ được đảm bảo bởi vùng chứa sẽ được khởi tạo trước khi đậu hiện tại được khởi tạo.
Cách sử dụng @DependsOn:
@Thành phần
Phía trên lớp chú thích;@Bean
Phương pháp chú thích ở trên;@DependsOn
Chú thích ở cấp độ lớp chỉ hợp lệ khi sử dụng phương pháp quét thành phần với If.@DependsOn
Lớp có chú thích được sử dụng thông qua XML và chú thích sẽ bị bỏ qua.
Bằng cách này nó sẽ hoạt động.Ví dụ:
@Configuration lớp công khai BeanOrderConfiguration { @Bean @DependsOn("beanB") public BeanA BeanA(){ System.out.println("bean A init"); return new BeanA(); .out.println("bean B init"); return new BeanB() } @Bean @DependsOn({"beanD","beanE"}) public BeanC BeanC(){ System.out.println("bean C init"); return new BeanC(); } @Bean @DependsOn("beanE") public BeanD BeanD(){ System.out.println("bean D init"); return new BeanD() } @Bean public BeanE; BeanE(){ System.out.println("bean E init"); trả về BeanE mới();
Thứ tự tải của các hạt trong đoạn mã trên là:
đậu B init đậu A init đậu E init đậu D init đậu C init
Trên phương thức được đánh dấu bằng @Bean, nếu một tham số được truyền vào, springboot sẽ tự động tìm kiếm tham chiếu thuộc loại này trong ngữ cảnh mùa xuân cho tham số này. Và khởi tạo thể hiện của lớp này trước.
Sử dụng tính năng này, chúng ta cũng có thể kiểm soát thứ tự tải đậu.
Ví dụ:
@Bean public BeanA BeanA(BeanB demoB){ System.out.println("bean A init"); return new BeanA(); } @Bean public BeanB BeanB(){ System.out.println("bean B init") ; trả về BeanB mới();
Kết quả của điều trên là BeanB được khởi tạo và tải trước BeanA.
Cần lưu ý rằng springboot sẽ tìm kiếm theo loại. Nếu nhiều phiên bản thuộc loại này được đăng ký vào ngữ cảnh mùa xuân, chúng cần được chỉ định bằng @Qualifier("Bean name").
Trong hệ thống lò xo, có một vòng đời từ vùng chứa đến khởi tạo & khởi tạo Bean, đồng thời nhiều điểm mở rộng được cung cấp để cho phép mở rộng hợp lý trong các bước này.
Thứ tự tải của các điểm mở rộng này được điều khiển bởi chính lò xo và hầu hết chúng không thể can thiệp được. Bạn có thể sử dụng điều này để mở rộng các điểm mở rộng của lò xo. Thêm mã khởi tạo doanh nghiệp của riêng bạn vào điểm mở rộng tương ứng. Kiểm soát trình tự không bao giờ đạt được.
Về việc phân tích cụ thể hầu hết các điểm mở rộng trong spring container, trước đây tôi đã viết một bài giới thiệu chi tiết: tất cả các điểm mở rộng trong Spring&SpringBoot.
Đã đặt hàng/Đã đặt hàng ưu tiên
Giao diện/chú thíchSpring cung cấp các phương thức sau để kiểm soát thứ tự tải đậu:
Đã đặt hàng/Đã đặt hàng ưu tiên
Giao diện, ghi đè phương thức đặt hàng@Order/@Ưu tiên
chú thích,@Đặt hàng
Chú thích có thể được sử dụng ở cấp phương thức, trong khi@Sự ưu tiên
Chú thích không hoạt động;Đối với các loại đậu tùy chỉnh, các phương pháp trên có thể kiểm soát thứ tự tải đậu. Bất kể bạn triển khai giao diện hay sử dụng chú thích như thế nào, giá trị càng nhỏ thì mức độ ưu tiên càng cao. Khi bạn triển khai giao diện PriorityOrdered hoặc sử dụng các đậu có chú thích @Priority, mức độ ưu tiên tải của chúng sẽ cao hơn so với việc triển khai giao diện Ordered hoặc sử dụng @Order. . Bean được chú thích.
Cần lưu ý rằng việc sử dụng phương pháp trên sẽ chỉ thay đổi thứ tự (hoặc mức độ ưu tiên) trong đó các Bean triển khai cùng một giao diện được tải vào các bộ sưu tập (chẳng hạn như List, Set, v.v.), nhưng phương pháp này sẽ không ảnh hưởng đến sự khác biệt khi bối cảnh ứng dụng Spring được bắt đầu. Thứ tự khởi tạo Bean (thứ tự khởi động).
@Component @Order(1) public class BeanA { // Định nghĩa BeanA } @Component @Order(2) public class BeanB { // Định nghĩa BeanB }
Đầu tiên hãy xác định hai Bean để triển khai cùng một giao diện và thêm chú thích @Order.
giao diện công khai IBean { } @Order(2) @Component lớp công khai AnoBean1 triển khai IBean { Private String name = "ano order Bean 1"; public AnoBean1() { System.out.println(name); @Component lớp công khai AnoBean2 triển khai IBean { tên chuỗi riêng = "ano order Bean 2"; System.out.println(tên); } }
Sau đó, trong một Bean thử nghiệm, hãy đưa vào một danh sách IBeans. Chúng ta cần kiểm tra xem thứ tự của các Bean trong danh sách này có phù hợp với các quy tắc @Order đã xác định hay không.
@Component public class AnoTestBean { public AnoTestBean(List anoBeanList) { for (IBean Bean : anoBeanList) { System.out.println("in ano testBean: " + Bean.getClass().getName()); }
Chú thích này được sử dụng để chỉ định thứ tự tải các tệp cấu hình. Tuy nhiên, qua thử nghiệm thực tế thì thấy cách sử dụng sau không mang lại hiệu quả:
@Configuration @AutoConfigureOrder(2) public class BeanOrderConfiguration1 { @Bean public BeanA BeanA(){ System.out.println("bean A init"); return new BeanA(); } } @Configuration @AutoConfigureOrder(1) public class BeanOrderConfiguration2 { @Bean công khai BeanB BeanB(){ System.out.println("bean B init"); trả về BeanB mới();
Dù bạn điền bao nhiêu số thì thứ tự nạp cũng không thay đổi. Vậy @AutoConfigureOrder này được sử dụng như thế nào?
@AutoConfigureOrder có thể áp dụng cho thứ tự của AutoConfig trong các gói phụ thuộc bên ngoài, nhưng không thể sử dụng để chỉ định thứ tự trong gói này. Các gói có thể được quét trong dự án của bạn đều là Cấu hình bên trong và spring giới thiệu Cấu hình bên ngoài thông qua tệp spi duy nhất của spring: spring.factories.
Nói cách khác, @AutoConfigureOrder có thể thay đổi thứ tự của @Configuration trong spring.factories.
Cách sử dụng cụ thể:
@Configuration @AutoConfigureOrder(10) public class BeanOrderConfiguration1 { @Bean public BeanA BeanA(){ System.out.println("bean A init"); return new BeanA(); } } @Configuration @AutoConfigureOrder(1) public class BeanOrderConfiguration2 { @Bean công khai BeanB BeanB(){ System.out.println("bean B init"); trả về BeanB mới();
mùa xuân.factories:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.example.demo.BeanOrderConfiguration1,\ com.example.demo.BeanOrderConfiguration2
Trên thực tế, tại nơi làm việc, tôi tin rằng nhiều người đã gặp phải tình trạng tải đậu với các phần phụ thuộc phức tạp. Nếu chúng ta để sự không chắc chắn này xảy ra, tốt hơn là chúng ta nên tự kiểm soát nó để có thể dễ dàng nhìn thấy nó khi đọc mã. giữa các hạt đậu.
Chuyên mục câu hỏi phỏng vấn Java trực tuyến, chào mừng bạn đến thăm.
Sau đó, bạn có thể gửi tin nhắn riêng cho tôi và tôi sẽ cố gắng hết sức để giúp bạn.
Cuối cùng, bài viết này nói về cách kiểm soát thứ tự nạp đậu? Vậy là xong bài viết này. Nếu bạn muốn biết thêm về cách kiểm soát thứ tự nạp đậu? Về nội dung, 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! .
Xin chào mọi người, tôi đã hoàn thành chương trình C cơ bản này để hiển thị tập hợp có thứ tự, tối thiểu, tối đa, trung bình và trung bình cho người dùng nhập bất kỳ tập hợp số nào. Vấn đề tôi gặp phải là khi in số, tôi phải đặt độ chính xác tiêu chuẩn bằng cách sử dụng đại loại như "3,2% f", làm cách nào để
Tôi có trình nền dịch vụ dựa trên Python này đang thực hiện rất nhiều IO đa kênh (chọn). Từ một tập lệnh khác (cũng là Python), tôi muốn truy vấn trạng thái/thông tin của trình nền dịch vụ này và/hoặc xử lý điều khiển (ví dụ: tạm dừng, tắt nó, thay đổi một số tham số
Tôi đọc được rằng Fortran có các quy tắc nghiêm ngặt về thứ tự đánh giá các biểu thức. Điều này rất quan trọng đối với một số thuật toán số. Làm cách nào các chương trình C số có thể kiểm soát thứ tự của các phép toán dấu phẩy động và ngăn trình biên dịch "tối ưu hóa" thành thứ tự hoạt động không mong muốn, chẳng hạn như thay đổi (a*b)*c
Bối cảnh: Toàn bộ vấn đề có thể được tóm tắt khi tôi đang cố gắng tái tạo hành vi của hệ thống gọi điện (hoặc nhánh), nhưng trong môi trường mpi. (Hóa ra bạn không thể gọi song song hệ thống.) Điều này có nghĩa là tôi có một chương trình chạy trên nhiều nút, mỗi nút một nút
Tôi đã nghĩ đến việc kiểm soát scanf để chấp nhận bất kỳ đầu vào nào trong c. Khái niệm của tôi là đợi 10 giây (hoặc bất kỳ lúc nào khác) để chấp nhận bất kỳ đầu vào nào. Sau 10 giây nó sẽ thoát và không nhận được bất kỳ đầu vào nào nữa. int main(){ int a,b,c,d;
Tôi đang cố gắng sử dụng trình tạo để dừng luồng thực thi trên setTimeOut. Tôi đã làm gì sai? Tôi không thể lấy console.log để thoát sau mỗi 1500 mili giây. Tôi mới làm quen với nút, nếu tôi đang làm điều gì đó thực sự ngu ngốc thì xin đừng
Tôi muốn ngăn xếp Hoạt động của ứng dụng của mình chứa nhiều phiên bản của cùng một Hoạt động, mỗi phiên bản xử lý dữ liệu khác nhau. Vì vậy, tôi sẽ có Hoạt động A trong ngăn xếp Hoạt động xử lý dữ liệu a, b, c và
Tôi có tệp bash này yêu cầu thiết bị cung cấp IP OpenSSH, mật khẩu, v.v. Bây giờ nếu tôi sử dụng ssh root@ip tôi phải nhập mật khẩu. Điều này thực sự khó chịu. Thứ hai; tôi không thể lấy tập lệnh của mình để gửi lệnh tới nó. đây là điều tôi muốn
Tôi đang cố kiểm tra thuộc tính bộ đệm của máy mà tôi có quyền truy cập. Để làm điều này, tôi đang cố gắng đọc bộ nhớ và tính thời gian cho nó. Tôi đã thay đổi kích thước bộ làm việc và chế độ truy cập sải chân để có được các phép đo khác nhau. Mã như sau: clock1 = get_ticks() for (i
Tôi đang cố gắng viết một tệp tạo tệp để thay thế một trong các tập lệnh tôi sử dụng để xây dựng một ứng dụng khá lớn. Tập lệnh hiện tại biên dịch từng tệp một và lý do chính để sử dụng make là để song song hóa quá trình xây dựng. Sử dụng make -j 16 Tôi hiện đang sử dụng máy chủ văn phòng
Tôi đang tạo một chương trình thử nghiệm nhỏ thể hiện giao diện bảng điều khiển thô sơ. Chương trình này là một dòng nhận thông thường, chương trình phản hồi thậm chí không nhận ra "thoát" và muốn bạn buộc thoát bằng cách nhấn control-c. Thực hiện trên Mingw32.
Được rồi, tôi có điện thoại VOIP. Tôi biết địa chỉ IP và cổng của điện thoại, đồng thời có toàn quyền truy cập vào điện thoại và tôi đang sử dụng nó để gọi điện thoại SIP thông qua đường dây SIP. Về cơ bản, tôi luôn muốn xem điều gì đang diễn ra trên điện thoại của mình nhưng tôi không biết bắt đầu từ đâu. giống
Có thể chỉ định tên ứng dụng được CWinApp::WriteProfileString() sử dụng không? Nếu tôi sử dụng CWinApp::SetRegistryKey để đặt tên công ty của mình thành "MyCompany",
Tôi đang cố gắng kiểm soát Tor bằng Python. Tôi đã đọc một số câu hỏi khác trên stackoverflow về chủ đề này, nhưng không có câu hỏi nào trả lời câu hỏi này. Tôi đang tìm cách mang lại cho bạn một "danh tính mới", mới
Gần đây tôi đang thực hiện một dự án liên quan đến việc chuyển dữ liệu giữa thiết bị iPhone và đồng hồ và điều khiển các bước nhảy giao diện của nhau. Tôi đã tìm kiếm rất nhiều thông tin trên Internet và thấy rằng các trang web trong nước cũng không giới thiệu nhiều về khía cạnh này, còn các trang web nước ngoài thì không. chưa đầy đủ nên tôi viết bài này ở đây để mọi người tham khảo. Tôi hy vọng Chúa có thể cho tôi một số hướng dẫn.
Tôi muốn tăng phạm vi giá trị trong cốt truyện. Trong ví dụ, các giá trị nằm trong khoảng từ 50 đến 200. Tuy nhiên mình cần gán các giá trị như sau: 50 75 100 125 150 175 200 và sẽ tốt hơn nếu sử dụngscale_fill_gradientn
Tôi có IconButton và khi nhấn vào hiệu ứng gợn sóng có hình tròn và lớn hơn diện tích của nút, làm cách nào để giảm kích thước của hiệu ứng gợn sóng khi nhấp vào nút? IconButton(ràng buộc
Tôi đang sử dụng Hợp đồng mã để tạo các tổ hợp vệ tinh cho dự án của mình. Về cơ bản, nó tạo một MyAssembly.Contracts.dll cho MyAssembly.dll của dự án. Cái này nên được đặt bên cạnh cụm lắp ráp của bạn, nhưng
Tôi muốn vẽ biểu đồ bằng các mặt, trong đó các cạnh khác nhau giữa các bảng. Các bảng được tự động sắp xếp theo thứ tự bảng chữ cái (theo quy ước trong ggplot). Một ví dụ đơn giản: thư viện(igraph) thư viện(ggraph) g <- mak
Tôi muốn tạo một tiện ích cho ứng dụng Android của mình để hiển thị một số chi tiết theo thời gian thực về một vị trí, chẳng hạn như thời tiết. Nhưng tôi muốn cho phép tối đa 3 phiên bản tiện ích con bất kỳ lúc nào, mỗi phiên bản có một vị trí khác nhau. Tôi không biết phải làm gì và không thể tìm thấy bất kỳ thông tin nào.
Tôi là một lập trình viên xuất sắc, rất xuất sắc!