JDK动态代理

Time: 2024-05-16 Thursday 11:02:01
Author: Jackasher

JDK动态代理

代理主程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Test
public void ProxyTest() throws InterruptedException {
OrderServiceImpl target = new OrderServiceImpl();

//传入代理类
MyinvokationHander myinvokationHander = new MyinvokationHander(target);

//转型为接口,接口可以得到方法
OrderService orderService = (OrderService) Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), myinvokationHander);

orderService.detail();
orderService.modify();
orderService.generate();

}

InvocationHander

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package org.example.sercice;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
* @author Jackasher
* @version 1.0
* @className MyinvokationHander
* @since 1.0
**/
public class MyinvokationHander implements InvocationHandler {

//接口接受实现类
private OrderService orderService;

public MyinvokationHander(OrderService orderService) {
this.orderService = orderService;
}

@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

long begin = System.currentTimeMillis();

//方法四要素,对象,参数,返回值,哪个方法
Object value = method.invoke(orderService, args);
long end = System.currentTimeMillis();
System.out.println("该方法用时:" + (end - begin) + "ms");
System.out.println();
return value;
}
}


JDK动态代理
http://example.com/2024/05/16/JDK动态代理/
作者
Jack Asher
发布于
2024年5月16日
许可协议