- Tạo ứng dụng Spring Boot bằng Spring Launchizr
- Cấu hình Cassandra trong Spring Boot
- Định cấu hình nhóm kết nối Tomcat trên Spring Boot
- Định tuyến tin nhắn Camel đến Artemis được nhúng bằng WildFly
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.
Và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
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.
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() } };
Cảm giác ruột thịt của tôi về câu hỏi đầu tiên là có. Đối với câu hỏi thứ hai của bạn, tôi đã thấy tại nơi làm việc, mọi người sử dụng JDK8 và ANT, sau đó biên dịch các gói cũ được viết bằng JDK6 thành 1.6. Tôi thực sự bối rối. Câu trả lời hay nhất Nói chung, java tương thích ngược với tất cả
Theo tôi biết, có hai cách để sử dụng JDK trong Windows: Tải xuống tệp cài đặt JDK và cài đặt nó. Tải xuống các tệp nhị phân JDK. Sự khác biệt giữa chúng là gì? Câu trả lời hay nhất Ưu điểm: Đơn giản và dễ dàng, đột nhiên mọi thứ đều hoạt động. Nhược điểm: Mọi thứ hiện đều sử dụng phiên bản mới -
Tôi đang cài đặt HANA Studio và đã tải xuống JDK 1.8 và JDK 1.7. Tôi đang sử dụng JDK 1.8 cho Eclipse và một số thứ khác mà tôi đang nghiên cứu, nhưng khi tôi cố gắng vượt qua vòng đời SAP HANA
Những tính năng nào của JDK 7 (không bao gồm tính năng động vì nó không được java sử dụng) khiến các phiên bản tệp lớp mới không tương thích với JDK 6. Có vẻ như tất cả các tính năng đều có thể được triển khai thông qua mã keo do trình biên dịch tạo ra. Ví dụ: chuyển tiếng lóng
Tôi có phải sử dụng Oracle JDK thay vì Open JDK khi cài đặt thư viện của cloudera trên máy redhat để tạo cụm cloudera không? Câu trả lời hay nhất Tính đến thời điểm viết bài này, chỉ có phiên bản Oracle JDK được chứng nhận hoạt động với C
Câu lệnh sau có hợp lệ trong Java 7 không? Timestamp.valueOf("0000-00-00 00:00:00.000000"); Bởi vì đoạn mã trên hoạt động tốt khi được xây dựng bằng JDK 1.6, nhưng khi sử dụng JD
Cập nhật Trong suốt quá trình đánh giá, hóa ra phương pháp đo điểm chuẩn mà tôi thực hiện không chính xác và do đó kết quả bị sai lệch. Sau khi sửa cách tiếp cận của tôi (như trong câu trả lời được chấp nhận), kết quả đúng như mong đợi - JDK 13 hoạt động tốt như JDK 11. Để biết thêm chi tiết
Chúng tôi sẽ sớm chuyển từ jdk14 sang jdk16. Của chúng tôi là một ứng dụng máy tính để bàn. Tôi cần thực hiện những bước nào để đảm bảo nó hoạt động bình thường trên máy khách? Bây giờ một số trong số họ sử dụng JRE4 và một số JRE6.Server-Solaris
Tôi có thư mục jdk1.7.0 trong /usr/lib/jvm cùng với các phiên bản open-jdk khác. Tôi muốn Ubuntu 12.04 của tôi coi jdk(jdk1.7.0) này là jdk chính của nó, tức là tôi không muốn sử dụng o
Tôi nghĩ điều này có thể liên quan đến Tại sao việc tạo một Danh sách thành Danh sách chung lại thành công trên Sun JDK 6 nhưng không biên dịch được trên Oracle
Mã biên dịch tốt khi sử dụng JDK 8 (1.8.0_212) nhưng không biên dịch được bằng JDK 11 (11.0.3) Oracle jdk và open jdk (aws corretto) Hãy thử sử dụng javac
Có thể cài đặt bất kỳ phiên bản Sun JDK hoặc Open JDK nào trên cygwin không. Lý do tôi đang tìm kiếm tùy chọn này là: có nhiều công cụ (ví dụ: jStack, jMap) có sẵn trong phiên bản unix của JDK, nhưng không có trong phiên bản gió.
Hãy xác nhận nhận định trên? Tôi cần biết họ đang đề cập đến điều gì khi đề cập đến JDK. Câu trả lời hay nhất Bộ công cụ phát triển Java là thứ mà chúng ta thường gọi là bộ công cụ để tạo các ứng dụng Java, bao gồm Java Compil
Sử dụng java -version mang lại cho tôi điều này. phiên bản java "1.7.0_80" Môi trường chạy thi hành Java(TM) SE (bản dựng 1.7.0_80-b15)
Câu hỏi này đã có câu trả lời ở đây: JAVA_HOME nên trỏ đến JDK chứ không phải JRE (25 câu trả lời) Đã đóng 4 năm trước. Xin chào, cảm ơn vì bất kỳ sự giúp đỡ nào bạn có thể cung cấp. Tôi vừa nâng cấp lên Ub
Đúng vậy, sau Alibaba và Tencent, Huawei cuối cùng đã mở mã nguồn JDK của riêng mình - Bisheng JDK! miễn phí! miễn phí! miễn phí! ! ! Oracle đang hoảng loạn? Bisheng JDK Bisheng JDK là phiên bản tùy chỉnh của OpenJDK Hu nội bộ của Huawei
đóng cửa. Câu hỏi này cần tập trung hơn. Hiện tại nó không chấp nhận câu trả lời. Bạn muốn cải thiện câu hỏi này? Đã cập nhật câu hỏi để chỉ tập trung vào một vấn đề chỉnh sửa bài đăng này. Đã đóng vào năm ngoái. Cải thiện nhiệm vụ này
Khi thêm Arquillian vào bản dựng Maven, tôi đã gặp phải ngoại lệ trên trong Eclipse: Thiếu tạo tác sun.jdk:jconsole:jar:jdk
đóng cửa. Câu hỏi này cần được hỏi tập trung hơn. Câu trả lời không được chấp nhận vào thời điểm này. Bạn muốn cải thiện vấn đề này? Đã cập nhật câu hỏi để chỉ tập trung vào một vấn đề chỉnh sửa bài đăng này. Đã đóng 5 năm trước. Cải thiện truy vấn này
Tôi đang cố gắng tạo một pom sẽ: sử dụng JDK chính xác dựa trên thuộc tính java.version từ plugin maven-toolchains-plugin. Theo maven-toolchains-plugin
Tôi là một lập trình viên xuất sắc, rất giỏi!