CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.
Bài viết trên blog CFSDN này bàn về mối quan hệ giữa @Autowired và static một cách chi tiết, được tác giả sưu tầm và biên soạn. Nếu các bạn quan tâm tới bài viết này thì nhớ like nhé.
Mục lục
- Mối quan hệ giữa @Autowired và tĩnh
- 1. Cảnh xảy ra
- 2. Phân tích nguyên tắc
- 3. Giải pháp
- 1. Thêm @Autowire vào hàm tạo
- 2. Chú thích bằng @PostConstruct
- phương pháp tĩnh sử dụng @Autowired
- Việc chèn lệnh không thành công, việc chèn hàm tạo đã thành công
Mối quan hệ giữa @Autowired và tĩnh
1. Cảnh xảy ra
Nhiều lần, một đồng nghiệp đã sử dụng static trong @Autowired của Spring, khiến đối tượng được chèn luôn báo cáo con trỏ null. Anh ấy không tìm thấy lỗi và đến hỏi tôi. Thực tế là trước đây tôi không biết về vấn đề này, nhưng tôi. dựa trên Đặc điểm của Spring container xác định rằng đối tượng anh ta gọi và đối tượng được chèn không phải là cùng một đối tượng, vì vậy chúng tôi nói với anh ta: thứ tự tải tĩnh là trước @Autowired; sau khi kiểm tra thông tin, tôi phát hiện ra rằng điều này; không phải vậy. . .
2. Phân tích nguyên tắc
Các biến tĩnh và biến lớp không phải là thuộc tính của đối tượng mà là thuộc tính của một lớp, vì vậy các phương thức tĩnh thuộc về lớp và các phương thức thông thường thuộc về đối tượng thực thể (nghĩa là đối tượng từ New Spring tiêm nằm trong vùng chứa). Đối tượng được khởi tạo trong , vì vậy không thể sử dụng các phương thức tĩnh.
Việc sử dụng các biến tĩnh và biến lớp mở rộng phạm vi sử dụng các phương thức tĩnh. Các phương thức tĩnh không được khuyến nghị trong Spring. Mục đích chính của việc chèn phụ thuộc là cho phép vùng chứa tạo một phiên bản của một đối tượng và sau đó sử dụng chúng trong suốt vòng đời. Nó cũng giúp việc kiểm tra dễ dàng hơn.
Khi sử dụng các phương thức tĩnh, bạn không còn cần phải tạo các phiên bản của lớp, điều này khiến việc kiểm tra trở nên khó khăn hơn và bạn không thể dựa vào việc chèn để tạo nhiều phiên bản với các phần phụ thuộc khác nhau cho một lớp nhất định. Ví dụ: trường tĩnh này được ngầm chia sẻ. và là một trạng thái toàn cầu, Spring không khuyến nghị điều này.
3. Giải pháp
1. Thêm @Autowire vào hàm tạo
?
1
2
3
4
5
6
7
8
9
10
11
|
@Thành phần
công cộng
lớp học
Bài kiểm tra {
riêng tư
tĩnh
Dịch vụ người dùng Dịch vụ người dùng;
@Autowired
công cộng
Kiểm tra(UserService userService) {
Test.userService = userService;
}
công cộng
tĩnh
vô hiệu
Bài kiểm tra() {
userService.test();
}
}
|
2. Chú thích bằng @PostConstruct
?
1
2
3
4
5
6
7
8
9
10
11
12
13
|
@Thành phần
công cộng
lớp học
Bài kiểm tra {
riêng tư
tĩnh
Dịch vụ người dùng Dịch vụ người dùng;
@Autowired
riêng tư
Dịch vụ người dùng userService2;
@PostXây dựng
công cộng
vô hiệu
trước khi khởi tạo() {
dịch vụ người dùng = dịch vụ người dùng2;
}
công cộng
tĩnh
vô hiệu
Bài kiểm tra() {
userService.test();
}
}
|
phương pháp tĩnh sử dụng @Autowired
Việc chèn lệnh không thành công, việc chèn hàm tạo đã thành công
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
@Thành phần
@Slf4j
công cộng
lớp học
Thông tin Cookie của người dùng
riêng tư
tĩnh
RedisTemplate redisTemplate;
riêng tư
tĩnh
JWTUtils jwtUtils;
@Autowired
công cộng
UserCookieInfoUtil(JWTUtils jwtUtils, RedisTemplate redisTemplate) {
UserCookieInfoUtil.jwtUtils = jwtUtils;
UserCookieInfoUtil.redisTemplate = redisTemplate;
}
công cộng
tĩnh
Bản đồ getCookieInfo(Chuỗi token) {
Bản đồ bản đồ =
mới
Bản đồ băm <>();
thử
{
Chuỗi loginName = jwtUtils.getLoginName(mã thông báo);
Thông tin chuỗi = redisTemplate.opsForValue().get(Constants.TOKEN_USER_INFO +
":"
+ tên đăng nhập);
bản đồ = JSONObject.parseObject(thông tin ==
vô giá trị
?
""
: thông tin, Bản đồ.
lớp học
);
}
nắm lấy
(Ngoại lệ e){
log.lỗi(
"Không lấy được thông tin đăng nhập từ bộ đệm: {}"
, đ);
}
trở lại
bản đồ;
}
}
|
Trên đây là kinh nghiệm cá nhân của mình, hi vọng có thể cho các bạn tham khảo và mong các bạn có thể ủng hộ mình.
Liên kết gốc: https://www.cnblogs.com/pangyangqi/p/10010866.html.
Cuối cùng, bài viết thảo luận chi tiết về mối quan hệ giữa @Autowired và static kết thúc tại đây. Nếu bạn muốn biết thêm về cuộc thảo luận chi tiết về mối quan hệ giữa @Autowired và static, vui lòng tìm kiếm bài viết CFSDN hoặc tiếp tục duyệt qua các bài viết liên quan. Tôi hy vọng tất cả các bạn ủ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!