sách gpt4 ai đã đi

Giải quyết vấn đề @Autowired injecting static interface

In lại Tác giả:qq735679552 Thời gian cập nhật: 2022-09-27 22:32:09 28 4
mua khóa gpt4 Nike

CFSDN nhấn mạnh vào việc tạo ra giá trị thông qua mã nguồn mở. Chúng tôi cam kết xây dựng một nền tảng chia sẻ tài nguyên để mọi người làm CNTT có thể tìm thấy thế giới tuyệt vời của riêng mình tại đây.

Bài đăng trên blog CFSDN này giải quyết vấn đề @Autowired injecting static interfaces. Bài đăng được tác giả thu thập và biên soạn. Nếu bạn quan tâm đến bài viết này, hãy nhớ thích nó.

Vấn đề giao diện tĩnh tiêm @Autowired

@Autowired rất tiện lợi cho việc tự động đưa các dịch vụ chung vào

giống:

?
1
2
3
4
5
6
7
8
@Thành phần
công cộng lớp học Cảnh báoMatterUtil {
   //Bảng báo động
   @Autowired
   riêng tư IDScypWarningMatterService cảnh báoMatterService;
   công cộng vô hiệu dScypWarningMatterFZ(){
       }
   }

Tuy nhiên, nếu bạn tiêm một dịch vụ tĩnh đã sửa đổi, nó không thể được tiêm

giống:

?
1
2
3
4
5
6
7
8
@Thành phần
công cộng lớp học Cảnh báoMatterUtil {
   //Bảng báo động
   @Autowired
   riêng tư tĩnh IDScypWarningMatterService cảnh báoMatterService;
   công cộng tĩnh vô hiệu dScypWarningMatterFZ(){
       }
   }

Sau đó, tôi tìm kiếm trên Baidu và tìm thấy một phương pháp

Mã đã sửa đổi như sau:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Thành phần
công cộng lớp học Cảnh báoMatterUtil {
   //Bảng báo động
   @Autowired
   riêng tư IDScypWarningMatterService cảnh báoMatterService;
   riêng tư tĩnh Cảnh báoMatterUtil cảnh báoMatterUtil;
   @PostXây dựng
   công cộng vô hiệu khởi tạo() {
     cảnh báoMatterUtil = cái này ;
     cảnh báoMatterUtil.warningMatterService = cái này .warningMatterService;
   }
   /**
    * Phương pháp giao bài
    *
    */
   công cộng tĩnh vô hiệu dScypWarningMatterFZ(){
     }
}

Thẻ giải thích

  • @Autowired: Tác động lên các trình xây dựng, thuộc tính và phương thức. Được tự động đưa vào bởi byType. (@Resource được tự động đưa vào bởi byName theo mặc định)
  • @PostXây dựng:Phương thức được sửa đổi bởi @PostConstruct sẽ chạy khi máy chủ tải Servle và chỉ được máy chủ thực thi một lần. PostConstruct được thực thi sau hàm tạo và trước phương thức init(). (Phương thức PreDestroy() được thực thi sau khi phương thức destroy() được thực thi)

Các vấn đề gây ra lỗi tiêm @Autowired

lý lịch

Trong quá trình thử nghiệm, tôi phát hiện @Autowired không thể inject được. Khi sử dụng dịch vụ, tôi phát hiện ra nó là null! .

lý do

Sau đây là một số lý do tại sao @Autowired không thể được đưa vào:

?
1
2
@Autowired
riêng tư tĩnh  Dịch vụ kiểm tra Dịch vụ kiểm tra;

Được sửa đổi bởi static, Spring dependency injection dựa vào các phương thức set, và các phương thức set là các phương thức đối tượng thông thường. Các biến static là các thuộc tính của lớp, do đó hoạt động injection không thể hoàn tất.

@Autowired tự động inject theo loại. Tóm lại, private TestService testService được khớp và inject theo loại TestService. Tên có thể không nhất quán. Nếu không khớp loại tương ứng, inject sẽ không thành công.

Nói chung, nó không được quản lý bởi container ioc và loại không thể khớp trong container. Chú thích (@Service, @repository, @Component, v.v.) bắt buộc phải được đưa vào container spring IOC.

Còn một tình huống nữa là khi tất cả các chú thích đều bình thường thì có thể là do quy tắc mặc định của Bean assembly của dự án SpringBoot là quét từ trên xuống dưới theo vị trí gói của lớp Application! "Lớp ứng dụng" đề cập đến lớp mục nhập dự án SpringBoot.

Vị trí của lớp học này rất quan trọng:

Nếu gói mà lớp Application nằm ở: com.boot.app, chỉ gói com.boot.app và tất cả các gói con của nó sẽ được quét. Nếu gói mà dịch vụ hoặc dao nằm không nằm trong com.boot.app và các gói con của nó, nó sẽ không được quét! Tức là đặt lớp Application lên trên package nơi dao và service nằm. com.boot.Application biết điểm rất quan trọng này. Vị trí khác nhau và không thể quét được các chú thích bên dưới vị trí tương ứng.

Trên đây là kinh nghiệm cá nhân của tôi, hy vọng có thể giúp bạn tham khảo và mong bạn có thể ủng hộ tôi.

Liên kết gốc: https://blog.csdn.net/happy_Pinocchio/article/details/50857917.

Cuối cùng, bài viết này về giải quyết vấn đề @Autowired injecting static interface đã có ở đây. Nếu bạn muốn biết thêm về cách giải quyết vấn đề @Autowired injecting static interface, vui lòng tìm kiếm các bài viết 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! .

28 4 0
qq735679552
Hồ sơ cá nhân

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á Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com