Siêu thị PDFTải ngay đi em, trời tối mất

Thư viện tri thức trực tuyến

Kho tài liệu với 50,000+ tài liệu học thuật

© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Động lực học lập trình Java, Phần 5: Việc chuyển đổi các lớp đang hoạt động pdf
MIỄN PHÍ
Số trang
20
Kích thước
205.0 KB
Định dạng
PDF
Lượt xem
1741

Động lực học lập trình Java, Phần 5: Việc chuyển đổi các lớp đang hoạt động pdf

Nội dung xem thử

Mô tả chi tiết

Động lực học lập trình Java, Phần 5: Việc chuyển đổi các lớp đang hoạt động

Tìm hiểu cách thay đổi các lớp khi chúng đang được nạp bằng Javassist

Dennis Sosnoski, Nhà tư vấn, Sosnoski Software Solutions, Inc.

Tóm tắt: Sau thời gian gián đoạn ngắn, Dennis Sosnoski trở lại với phần 5 của

loạt bài Động lực học lập trình Java của mình. Bạn đã thấy cách viết một chương

trình chuyển đổi các tệp lớp Java để thay đổi hành vi mã. Trong bài báo này,

Dennis cho bạn thấy cách kết hợp chuyển đổi với việc nạp các lớp thực sự bằng

cách sử dụng khung công tác Javassist, để xử lý tính năng hướng khía cạnh "đúng

thời gian" linh hoạt. Cách tiếp cận này cho phép bạn quyết định những gì bạn

muốn thay đổi trong thời gian chạy và có khả năng thực hiện các thay đổi khác

nhau mỗi khi bạn chạy một chương trình. Theo cách này, bạn cũng sẽ xem xét sâu

hơn vào các vấn đề chung của việc nạp lớp (classloading) trong JVM.

Trong Phần 4, "Các phép biến đổi lớp bằng Javassist," bạn đã học được cách sử

dụng khung công tác Javassist để chuyển đổi các tệp lớp Java do trình biên dịch

tạo ra, viết lại các tệp lớp đã sửa đổi. Bước chuyển đổi tệp lớp này rất quan trọng

để thực hiện các thay đổi liên tục, nhưng không nhất thiết phải tiện lợi khi bạn

muốn thực hiện các thay đổi khác nhau mỗi khi bạn thực hiện ứng dụng của bạn.

Đối với các thay đổi thoáng qua như vậy, một cách tiếp cận hoạt động khi bạn

thực sự khởi động ứng dụng của bạn là tốt hơn.

Kiến trúc JVM cho chúng ta làm điều này thuận tiện -- bằng cách làm việc với

việc thực hiện trình nạp lớp (classloader). Khi sử dụng các dấu móc của trình nạp

lớp, bạn có thể ngăn chặn quá trình nạp các lớp vào JVM và chuyển đổi các biểu

diễn lớp trước khi chúng thực sự được nạp. Để minh họa cách làm việc này, đầu

tiên tôi sẽ giải thích việc chặn nạp lớp trực tiếp, sau đó chỉ ra cách Javassist cung

cấp một phím tắt thuận tiện để bạn có thể sử dụng trong các ứng dụng của bạn.

Theo cách này, tôi sẽ sử dụng các đoạn mã từ các bài viết trước trong loạt bài này.

Đừng bỏ lỡ phần còn lại của loạt bài này

Phần 1, "Các lớp Java và nạp lớp" (04.2003)

Phần 2, "Giới thiệu sự phản chiếu" (06.2003)

Phần 3, "Ứng dụng sự phản chiếu" (07.2003)

Phần 4, "Chuyển đổi lớp bằng Javassist" (09.2003)

Phần 6, "Các thay đổi hướng-khía cạnh với Javassist" (03.2004)

Phần 7, "Kỹ thuật bytecode với BCEL" (04.2004)

Phần 8, "Thay thế sự phản chiếu bằng việc tạo mã" (06.2004)

Vùng nạp

Bình thường, bạn chạy một ứng dụng Java bằng cách xác định lớp chính như là

một tham số cho JVM. Điều này làm việc tốt với các hoạt động tiêu chuẩn, nhưng

không cung cấp cách nối bất kỳ đúng lúc vào quá trình nạp lớp có ích cho hầu hết

các ứng dụng. Như tôi đã thảo luận trong Phần 1 "Các lớp và việc nạp lớp," nhiều

lớp được nạp ngay trước khi lớp chính của bạn bắt đầu thực hiện. Việc ngăn chặn

nạp các lớp này đòi hỏi một mức gián tiếp trong việc thực hiện chương trình.

May mắn thay, rất dễ dàng để sao chép công việc JVM đã thực hiện trong khi chạy

lớp chính của ứng dụng của bạn. Tất cả những thứ mà bạn cần làm là sử dụng sự

phản chiếu (như đã trình bày trong Phần 2) để trước tiên tìm phương thức tĩnh

main() trong lớp cụ thể, sau đó gọi nó bằng các đối số dòng lệnh mong muốn. Liệt

kê 1 đưa ra mã ví dụ để thực hiện điều này (tôi đã để ngoài các phương thức nhập

khẩu và các lỗi ngoại lệ để giữ cho đoạn mã này ngắn gọn):

Liệt kê 1. Trình chạy (runner) ứng dụng Java

public class Run

{

public static void main(String[] args) {

if (args.length >= 1) {

try {

// load the target class to be run

Tải ngay đi em, còn do dự, trời tối mất!