2016-02-18 16 views
5

Tôi thấy rằng nếu tôi sử dụng chú thích, chương trình sẽ không ném ClassNotFoundException.Khi nào JVM tải lớp chú thích

class A { 
     @Transactional 
     public void insert() { 
      //insert something 
     } 
    } 

Tomcat bắt đầu successefully mà không JavaEE-api-7.0.jar chứa lớp javax.transaction.Transactional

Nó khiến tôi rất bối rối, không nên JVM ném một ClassNotFoundException khi nó tải lớp học A?

+0

Bạn có chắc chắn Tomcat không định nghĩa chú thích 'Giao dịch' của riêng nó? – DonyorM

+0

Câu trả lời này có thể hữu ích: http://stackoverflow.com/a/23502439/1466267 – SpaceTrucker

+0

@DonyorM Vâng, tôi chắc chắn. Khi tôi nhận được chú thích bằng cách phản chiếu một cách thích nghi, nó sẽ ném ClassNotFoundException – hhhyyq

Trả lời

5

Không, không được. Chú thích chỉ là siêu dữ liệu. Dự kiến ​​rằng mã byte chứa các chú thích chạy tốt ngay cả khi chú thích không nằm trong classpath. Tất nhiên, nếu một số thư viện cố gắng thực sự truy cập và sử dụng chú thích không có trong classpath, điều đó sẽ không hoạt động.

này explicitely được hỗ trợ để có thể, ví dụ

  • thêm chú thích được sử dụng bởi byte-code công cụ phân tích tĩnh như FindBugs, mà là ở không sử dụng khi chạy mã trong sản xuất
  • để có thể sử dụng các thực thể JPA tách rời trong máy khách mặc dù máy chủ là người duy nhất thực sự sử dụng các chú thích JPA
+0

Cảm ơn câu trả lời được thực hiện tốt. – hhhyyq

Các vấn đề liên quan