反射機制在動態代理中用於:取得被代理類別的元資料、動態產生代理類別、為代理類別實作方法。實戰案例:建立動態代理類別攔截 UserService 類別的 getUser() 方法,在方法呼叫前後執行自訂邏輯。
反射機制是Java 提供的一套API,允許程式在運行時檢查和修改類別及其成員。它可以透過 java.lang.reflect
套件中的類別來實作:
Class
:表示一個類別。 Method
:表示類別中的一個方法。 Field
:表示類別中的一個欄位。 動態代理程式是 Java 中的一種設計模式,它允許創建對象,該對象可以透明地呼叫其他對象的方法。代理類別在運行時根據被代理類別創建,並根據代理類別進行方法呼叫。
反射機制在動態代理中扮演著至關重要的角色,它使代理類別能夠:
Class
類別來取得被代理類別的類別資訊、方法和欄位。 Method
類,代理類別可以呼叫被代理類別的方法,並在方法呼叫前後執行自訂邏輯。 讓我們建立一個動態代理類別來攔截UserService
類別的getUser()
方法:
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class ProxyFactory { public static <T> T createProxy(Class<T> interfaceClass) { return (T) Proxy.newProxyInstance(interfaceClass.getClassLoader(), new Class[] {interfaceClass}, new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // 拦截方法调用,并执行自定义逻辑 System.out.println("Method called: " + method.getName()); return method.invoke(new UserService(), args); } }); } } public interface UserService { User getUser(String username); } public class UserServiceImple implements UserService { @Override public User getUser(String username) { // 获取用户信息 return new User(); } } public class Main { public static void main(String[] args) { UserService proxy = ProxyFactory.createProxy(UserService.class); proxy.getUser("admin"); } }
執行此程式碼後,將輸出:
Method called: getUser
此輸出表示代理程式類別已成功攔截並處理了UserService
類別的getUser()
方法。
以上是Java反射機制與動態代理有何關係?的詳細內容。更多資訊請關注PHP中文網其他相關文章!