JDK动态代理

1.反射

  • Method类
表示方法,类中的方法,通过Method可以指定执行类中的某个方法.
public class Test {
    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        
        //使用反射机制执行Sayhello方法。核心Method(类中的方法)
        HelloService traget = new HelloServiceImpl();
        
        //获取sayhello名称的对应的Method类对象
        Method method =  HelloService.class.getMethod("SayHello", String.class);
        
        //通过Method可以执行SayHello方法的调用
        /*
            invoke是Method中的方法。表示执行方法的调用
            参数:
            1.Object:表示对象,要执行这个对象的方法
            2.Object...args:表示方法执行时的参数值
            返回值:
            Object:方法执行后的返回值
         */
        //表达的意思是 执行traget对象的Sayhello方法参数是李四
        Object ret = method.invoke(traget,"李四");
    }
}
//打印结果:你好,李四!

2.JDk动态代理的实现

  • 反射包Java.lang.reflect

    三个类:InvocationHandle,Method,Proxy
  • InvocationHandle 接口(调用处理器)

    invoke()方法:表示代理对象要执行的功能代码,代理类需要完成的功能就写在该方法中.
    //方法原型
    public Object invoke(Object proxy, Method method, Object[] args)
    • 方法参数
    Object proxy:  JDK创建的代理对象,无需赋值.
    Method method:  目标类中的方法,JDK提供method对象,无需赋值.
    Object[] args:  目标类中方法的参数.
    • 方法使用
    1.创建类来实现 InvocationHandle 接口.
    2.重写invoke()方法,把需要的功能在写在该方法中.

今夜月色真美
1 声望0 粉丝