Java 反射機制和動態代理是 Java 編程語言的兩個重要特性。它們為程序員提供了更加靈活和動態的代碼編寫方式。
Java 反射機制是一種在運行時獲取任何一個類的信息,包括類名、父類、實現的接口、構造方法、成員變量、成員方法等。通過反射機制,我們可以動態地創建對象、調用方法,甚至可以在運行時動態地修改類或成員變量的值。
// 使用反射機制獲取某個類的類名 Class clazz = String.class; System.out.println(clazz.getName()); // 輸出:java.lang.String
動態代理是一種實現 AOP(面向切面編程)的方式,它可以在運行時動態地創建一個實現某個接口的代理對象。通過代理對象,我們可以在執行方法前后添加額外的邏輯,例如日志記錄、性能統計、權限控制等。
// 使用動態代理創建一個實現了某個接口的代理對象 interface MyInterface { void doSomething(); } class MyInterfaceImpl implements MyInterface { public void doSomething() { System.out.println("do something"); } } class MyProxy implements InvocationHandler { private Object target; public MyProxy(Object target) { this.target = target; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("before"); Object result = method.invoke(target, args); System.out.println("after"); return result; } } MyInterface myObject = new MyInterfaceImpl(); MyInterface myProxy = (MyInterface) Proxy.newProxyInstance( MyInterface.class.getClassLoader(), new Class[] { MyInterface.class }, new MyProxy(myObject) ); myProxy.doSomething(); // 輸出: // before // do something // after
通過 Java 反射機制和動態代理的應用,我們可以實現更加靈活、動態地編寫代碼,滿足不同的業務需求。