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()方法,把需要的功能在写在该方法中.
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。