リフレクション メカニズムは、プロキシされたクラスのメタデータの取得、プロキシ クラスの動的生成、およびプロキシ クラスのメソッドの実装のために動的プロキシで使用されます。実際のケース: UserService クラスの getUser() メソッドをインターセプトする動的プロキシ クラスを作成し、メソッドが呼び出される前後にカスタム ロジックを実行します。
リフレクション メカニズムは、プログラムが実行時にクラスとそのメンバーを検査および変更できるようにする Java によって提供される API のセットです。これは、java.lang.reflect
パッケージ内のクラスを通じて実現できます。 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()
Class
: クラスを表します。 メソッド
: クラス内のメソッドを表します。 フィールド
: クラス内のフィールドを表します。 Class
クラスを使用して、プロキシされたクラスのクラス情報、メソッド、およびフィールドを取得します。 Method
クラスを使用すると、プロキシ クラスはプロキシ クラスのメソッドを呼び出し、メソッドの前後でカスタム ロジックを実行できます。メソッド呼び出し。 UserService
クラスの getUser()
メソッドをインターセプトする動的プロキシ クラスを作成しましょう: 🎜rrreee🎜Runこのコード その後、次の出力が行われます: 🎜rrreee🎜 この出力は、プロキシ クラスが UserService
クラスの getUser()
メソッドを正常にインターセプトして処理したことを示します。 🎜以上がJava リフレクション メカニズムと動的プロキシの間にはどのような関係がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。