#Spring
11 bài viết.
return user; - một dòng code, bốn tầng trung gian, và một vòng tròn khép lại
Bài cuối: bốn khuôn mặt của lớp trung gian xếp thẳng hàng trong đúng một dòng return, và vì sao nổ StackOverflowError lại là điều may mắn.
BeanCurrentlyInCreationException - và cái cờ mà Spring khóa lại vì lý do chính đáng
Đổi sang field injection thì hết lỗi, bật allow-circular-references thì chạy thật. Nhưng lúc mở cái cờ mà Spring chủ động khoá lại, bạn đang mở cái gì?
readOnly=true mà tôi vẫn insert được
readOnly không phải cái khoá, nó là lời nhắn - và chỉ những ai chịu nghe mới nghe. Bài này hé lộ cuốn sổ của Hibernate.
Hai method, hai @Transactional - mà chỉ một transaction để chết chung
@Transactional không nói mở transaction, nó nói method này cần chạy trong một transaction. Quyền quyết định nằm ở cái vỏ, và cái vỏ thò tay vào túi của thread.
Ném exception mà dữ liệu vẫn được commit
Cái vỏ có đó, lời gọi có đi qua nó, mà vẫn không rollback: bảng luật mặc định của Spring chỉ rollback với unchecked exception.
@Cacheable không cache - rồi khi cache được, nó trả nhầm đồ của người khác
Cache cũng chỉ là một cái Map, và khoá mặc định của nó chỉ gồm tham số. Hai method khác nhau cùng cacheNames là cùng một ô.
@Async của tôi chạy tuần tự như thường
Thiếu một dòng bật tính năng thì annotation chỉ còn là lời khai không ai đọc. Và khi nó chạy được rồi, exception lại chết ở một thread khác.
@Transactional gọi từ chính class mình lại không chạy
Lời gọi từ trong chính class không đi ra ngoài cái vỏ, nên không ai kịp làm gì cả. Bài này giải thích vì sao đừng bao giờ tin this.
getClass() của tôi in ra `$$SpringCGLIB$$`, tôi có làm hỏng gì không?
Vật được trao không phải vật bạn tưởng: vì sao Spring Boot đúc proxy bằng CGLIB kể cả khi đã có interface, và vì sao method final làm @Transactional bốc hơi.
Tôi POST JSON lên, mọi field đều null - và Spring vẫn trả 200?
Dãy quầy có người nhận-tất: vì sao thiếu một annotation thì Spring nhìn thấy request nhưng không ai đọc body, và không ai báo cho bạn biết.
@Value của tôi bị null, và Spring không hề báo lỗi?
Kẻ đến quá sớm thì không được phục vụ - chuyện cái List được đổ đầy sau lưng bạn, và vì sao @Transactional trong @PostConstruct cũng im lặng vì cùng một lý do.