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
|
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();
}
}
|
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.

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

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! .
Tôi là một lập trình viên xuất sắc, rất giỏi!