2010-03-28 39 views

Trả lời

6

Câu trả lời hay nhất cho câu hỏi của bạn sẽ được điều chỉnh bởi các nhu cầu và mục tiêu cụ thể của bạn; nếu bạn có thể mở rộng dựa trên những gì bạn đang cố gắng hoàn thành, tôi có thể cung cấp một phản ứng phù hợp hơn.

Thay đó, tuy nhiên, trong kinh nghiệm của tôi, ASM cung cấp có lẽ là sự kết hợp tốt nhất của sự trưởng thành, linh hoạt và dễ sử dụng:

  • Nó được phát triển tương đối tích cực: mặc dù phiên bản mới nhất là từ tháng 6 năm 2009, các nhà phát triển thường xuyên thực hiện cam kết với VCS của họ.
  • Nó đã được sử dụng rộng rãi trong một số sản phẩm Java nổi bật, chẳng hạn như AspectJ, Groovy, Cobertura và nhiều sản phẩm khác, hứa hẹn một nền tảng người dùng rộng và do đó là một cộng đồng rộng lớn để hỗ trợ.
  • Tài liệu được viết khá kỹ lưỡng và có một số hướng dẫn, hướng dẫn sử dụng và tài liệu tham chiếu có sẵn từ số OW2 Consortium và cộng đồng nói chung.

N.B. Nhận xét @Yuri bên dưới mô tả tình huống mà cá nhân tôi chưa gặp phải nhưng điều đó có khả năng gây ra trở ngại đáng kể. Hãy lưu ý quan sát/kinh nghiệm của mình trong khi đánh giá các thư viện thao tác bytecode khác nhau.

+0

Xin lỗi về việc thiếu chi tiết cụ thể trong câu hỏi. Tôi không muốn đưa ra các chi tiết cụ thể về những gì tôi đang làm, nhưng câu trả lời của bạn khá hữu ích. Cảm ơn. Tôi nghĩ tôi sẽ sử dụng ASM. – Daniel

+1

Nhìn vào câu trả lời này tôi đã thử ASM và nó (4.0) có hoặc là một lỗi hoặc hành vi thực sự kỳ lạ. Tôi đang sử dụng API cây và lặp lại hướng dẫn của phương thức InsnList. Bây giờ, lần lặp đầu tiên cho một kết quả và một phép lặp giống hệt nhau sau lần đầu tiên đưa ra một kết quả khác - một lệnh được sao chép và đặt lên đầu danh sách. Không có mã sửa đổi nào cả, chỉ hai lần lặp lại một lần. Chuyển sang Javassist. –

+0

@YuriUshakov: Đó không phải là một tình huống mà cá nhân tôi đã trải qua. Cảm ơn cho những người đứng đầu lên! – RTBarnard

4

Điều đó thực sự phụ thuộc vào cách bạn xác định trực quan ;-) Tôi bắt đầu sử dụng ASM hai tuần trước cho một nhiệm vụ nhất định trong dự án hiện tại của tôi và nó hoạt động như một sự quyến rũ. Nó chỉ mất cho tôi một vài giờ để hiểu nó và có thể sử dụng nó, nhưng tôi sẽ không chính xác gọi API trực quan. Nhưng nếu bạn biết một chút về Java bytecode và đã quen thuộc với mô hình khách truy cập, đường cong học tập không phải là rất cao, IMO.

Một ưu điểm khác của ASM là nó dường như được đóng gói với API tiêu chuẩn ít nhất trong JDK mặt trời, mặc dù trong một gói khác (com.sun.xml.internal.ws.org.objectweb.asm và gói con).

+0

Bạn nói đúng: đánh giá bởi một số API lạ trên mạng, định nghĩa của mọi người về trực quan dường như khác nhau rất nhiều;). Tôi đã dành một chút thời gian nhìn vào ASM, và tôi ít bị đe dọa hơn tôi mong đợi! Tôi nghĩ tôi sẽ gắn bó với nó. Cảm ơn câu trả lời của bạn. – Daniel

+0

Vui lòng không sử dụng các gói triển khai ... –

+1

Vâng, đúng, không sử dụng các gói triển khai. Và đừng thao tác bytecode, trừ khi bạn thực sự phải ;-) –

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