sách gpt4 ai đã đi

Giải quyết vấn đề @Around không hoạt động đối với các phương thức tĩnh

In lại Tác giả:qq735679552 Thời gian cập nhật: 2022-09-29 22:32:09 30 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 đề @Around không hoạt động với các phương thức tĩnh. 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ó.

Kịch bản:

Khi xử lý các tác vụ theo lịch trình, vì các phương pháp này là phương pháp tĩnh, hãy sử dụng chú thích @Around trong khía cạnh aop để theo dõi xem lệnh gọi phương pháp có bất thường không.

Phát hiện aop không có hiệu lực.

Mã như sau:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
hai mươi mốt
hai mươi hai
hai mươi ba
hai mươi bốn
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/*Lớp cắt lát*/
@Diện mạo
@Thành phần
lớp công khai RetryAop {
  riêng tư tĩnh Logger logger = LoggerFactory.getLogger(RetryAop.class);
  @Around(giá trị = "@annotation(TechlogRetry)")
  Đối tượng công khai monitorAround(ProceedingJoinPoint pjp) ném Throwable {
  }
}
/*Chú thích tương ứng, đánh dấu các phương pháp cần thiết*/
@Target(Loại phần tử. PHƯƠNG THỨC)
@Retention(Chính sách giữ chân.RUNTIME)
công khai @interface TechlogRetry {
  long waitMsec() mặc định là 0;
  Lớp[] retryThrowable() mặc định {};
}
/*Phương pháp kiểm tra tương ứng*/
@Thành phần
@EnableScheduling
lớp công khai TimerWork {
  //Phương thức thành viên có thể được gọi thành công
  @Scheduled(cron = "*/5 * * * * ?")
  @TechlogRetry(waitMsec = 3000, retryThrowable = Exception.class)
  công khai void work1() {
   System.out.println("Phương pháp tính thời gian 1...");
   throw new NullPointerException("ném ngoại lệ");
  }
   // Các phương thức tĩnh sẽ không thử lại
     @Scheduled(cron = "*/5 * * * * ?")
  @TechlogRetry(waitMsec = 3000, retryThrowable = Exception.class)
  công khai tĩnh void work2() {
   System.out.println("Phương pháp tính thời gian 2...");
   throw new NullPointerException("ném ngoại lệ");
  }
  // Bằng cách này nó có hiệu lực
  @Đã lên lịch(cron = "*/ 5 * * * * ? ")
  @TechlogRetry (chờMsec = 3000 ,retryThrowable = Ngoại lệ. lớp học )
  công cộng vô hiệu công việc4() {
   Hệ thống.out.println( "Đây là công việc4..." );
   TimerWork.work2(); // Khi gọi work2, hãy bình luận các bình luận có liên quan đến phương pháp 2
  }
 
}

Gây ra:

Có thể là do các phương thức tĩnh thuộc về lớp, trong khi các phương thức không tĩnh thuộc về bean, sẽ được tải vào container. Những lý do cụ thể cần được kiểm tra và bổ sung sau.

gỡ rối:

Giống như trong work4, hãy đưa phương thức tĩnh mà bạn cần gọi vào một phương thức không tĩnh và gọi phương thức đó.

Đã thêm: Ghi lại lỗi StackOverflowError do sử dụng @Around không đúng cách.

Sau khi một đồng nghiệp gửi một dịch vụ cấp cơ sở. Một dịch vụ lớp trên mà tôi chịu trách nhiệm đột nhiên bị sập. Tôi hoảng sợ và ngay lập tức kiểm tra nhật ký của dịch vụ lớp trên.

Việc xem nhật ký đặc biệt lâu. Tôi không thể tìm ra thông tin này được báo cáo từ đâu.

Nhảy lên đầu trang và bắt đầu tìm kiếm, kết quả: StackOverflowError. Tôi nghĩ đến các lệnh gọi đệ quy.

Giải quyết vấn đề @Around không hoạt động đối với các phương thức tĩnh

Sau đó tôi tìm thấy mã có liên quan:

Giải quyết vấn đề @Around không hoạt động đối với các phương thức tĩnh

Vì phương thức doSomething cũng bị @Around chặn lại, nên khi một phương thức đang được sử dụng bị chặn và đi vào doAround, other.doSomething() sẽ được gọi, điều này sẽ kích hoạt doAround một lần nữa.

Điều này khiến chương trình được gọi đệ quy và không thể thoát.

gỡ rối:

Khi @Around chặn, vấn đề có thể được giải quyết bằng cách loại trừ phương thức doSomething.

ps: Không sử dụng phương thức intercepted trong @Around.

Trên đây là kinh nghiệm cá nhân của tôi, hy vọng có thể cung cấp cho bạn một tài liệu tham khảo. Tôi cũng hy vọng bạn sẽ ủng hộ tôi. Nếu có bất kỳ sai sót hoặc cân nhắc nào chưa đầy đủ, xin vui lòng cho tôi biết.

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

Cuối cùng, bài viết này về giải quyết vấn đề @Around không hoạt động đối với các phương thức tĩnh kết thúc tại đây. Nếu bạn muốn biết thêm về cách giải quyết vấn đề @Around không hoạt động đối với các phương thức tĩnh, vui lòng tìm kiếm các bài viết trên 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! .

30 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