反射机造正在消息署理顶用于:猎取被代办署理类的元数据、消息天生代办署理类、为代办署理类完成法子。真战案例:建立消息代办署理类拦挡 userservice 类的 getuser() 法子,正在办法挪用先后执止自界说逻辑。

Java反射机制与动态代理有何关系?

Java 反射机造取消息代办署理的干系

反射机造概述

反射机造是 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反射机造取消息代办署理有何干系?的具体形式,更多请存眷萤水红IT仄台其余相闭文章!

点赞(25) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部