cuốn sách gpt4 ai đã làm

[Proxy động]——Proxy động cho JDK và cglib

In lại Tác giả: Người biết Thời gian cập nhật: 2024-03-13 03:54:54 26 4
mua khóa gpt4 Nike

Tổng quan

Có mẫu thiết kếchế độ proxy, cung cấp proxy cho các đối tượng khác để kiểm soát quyền truy cập vào đối tượng này.
Về chế độ tác nhân, bạn có thể tham khảo: [Một mẫu thiết kế Java mỗi ngày (7)] - Chế độ tác nhân: https://blog.csdn.net/weixin_43598687/article/details/122072282
Chế độ proxy đề cập đến proxy tĩnh. Thật dễ dàng để hoàn thành hoạt động proxy của một lớp bằng proxy tĩnh. Tuy nhiên, nhược điểm của proxy tĩnh cũng bộc lộ: vì proxy chỉ có thể phục vụ một lớp nên nếu có nhiều lớp cần proxy thì cần phải viết một số lượng lớn các lớp proxy, điều này sẽ cồng kềnh hơn.

proxy độngCó thể thực hiện cải tiến chức năng cho các phương thức trong khi chương trình đang chạy mà không cần sửa đổi mã nguồn.

Dưới đây là hai cách triển khai tác nhân động:JDK, cglib

Proxy động cho JDK

JDK cung cấp giao diện java.lang.reflect.InvocationHandler và lớp java.lang.reflect.Proxy, có thể triển khai các proxy động dựa trên giao diện và công nghệ phản chiếu. [Phân tích cơ chế phản chiếu trong java: https://blog.csdn.net/weixin_43598687/article/details/121890395]

Sau đây là cách triển khai đơn giản proxy động của JDK:

1. Tạo lớp và giao diện mục tiêu

giao diện công cộng TargetInterface { public void coreWork();
lớp công khai Target triển khai TargetInterface { @Override public void coreWork() { System.out.println("===Phương thức kinh doanh lõi đang chạy===");

2. Tạo một lớp phương thức nâng cao

public class Lời khuyên { public void before(){ System.out.println("Nâng cao trước khi thực hiện phương thức kinh doanh cốt lõi..."); } public void after(){ System.out.println("Sau nâng cao..." ); } }

3. Kiểm tra proxy động

public class ProxyMain { public static void main(String[] args) { // Đối tượng mục tiêu Target target = new Target(); // Đối tượng nâng cao Lời khuyên = new Advice(); TargetInterface) Proxy.newProxyInstance( / /Trình nạp lớp đối tượng đích target.getClass().getClassLoader(), // Mảng các đối tượng mã byte giao diện có cùng đối tượng đích target.getClass().getInterfaces(), new InvocationHandler() { @Override public Objectgọi(Object proxy, Phương thức phương thức, Object[] args) ném Throwable { Advice.Before() ; // Đối tượng được nâng cao trước gọi = phương thức.invoke(target, args); lời khuyên.after(); // Lệnh gọi trả về được nâng cao sau; Thực thi phương thức proxy.coreWork() của lớp mục tiêu thông qua lớp proxy } }

Phương thức của đối tượng đích được thực thi thông qua đối tượng proxy và phương thức nâng cao cũng được thực thi.

proxy động cglib

Công nghệ proxy động dựa trên lớp cha

1. Tạo lớp mục tiêu

public class Target{ public void coreWork() { System.out.println("====Phương thức kinh doanh cốt lõi đang chạy===");

2. Tạo một lớp phương thức nâng cao

public class Lời khuyên { public void before(){ System.out.println("Nâng cao trước khi thực hiện phương thức kinh doanh cốt lõi..."); } public void after(){ System.out.println("Sau nâng cao..." ); } }

3. Kiểm tra proxy động

public class ProxyMain { public static void main(String[] args) { Target target = new Target(); Lời khuyên tư vấn = new Advice(); // 1. Tạo một công cụ tăng cường Enhancer = new Enhancer(); Đặt lớp mục tiêu nâng cao Enhancer.setSuperclass(target.getClass()); // 3. Đặt lớp tăng cường gọi lại.setCallback(new MethodInterceptor() { @Override public Object chặn (Đối tượng o, Phương thức phương thức, Đối tượng [] đối tượng, MethodProxy MethodProxy) ném Throwable { Advice.trước(); // Đối tượng tiền nâng cao gọi = phương thức.invoke(target, args()); Return call sau nâng cao; } }); // 4. Tạo proxy Target targetProxy = (Target) Enhancer.create(); targetProxy.coreWork() } };

26 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress