1. 首先,定义一个接口,并实现该接口;
2. 然后,定义一个handler,实现InvocationHandler接口,实现其invoke方法。
这里技巧是通过构造器传入目标代理对象(Object 类型),赋值给内部目标代理对象,
在实现invoke方法时,通过method.invoke(内部目标代理对象,args)实现真实调用;
3. 使用代理时,先构造该handler,然后通过Proxy获取代理实例,最终实现方法代理调用。
举例如下:
public interface HelloWorld {
public void sayHelloWorld();
}public class HelloWorldImpl implements HelloWorld{
@Override
public void sayHelloWorld() {
System.out.println("Hello World!");
}
}public class HelloWorldHandler implements InvocationHandler{
private Object targetObject;
public HelloWorldHandler(Object targetObject){
this.targetObject = targetObject;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("方法调用前...");
Object result = method.invoke(this.targetObject, args);
System.out.println("方法调用结束...");
return result;
}
}public class HelloWorldTest {
public static void main(String[] args) {
//业务对象
HelloWorldImpl obj = new HelloWorldImpl();
//拦截器对象
HelloWorldHandler handler = new HelloWorldHandler(obj);
//返回业务对象的代理对象
HelloWorld proxy = (HelloWorld)Proxy.newProxyInstance(
obj.getClass().getClassLoader(),
obj.getClass().getInterfaces(),
handler);
//通过代理对象执行业务对象的方法
proxy.sayHelloWorld();
}
}
本文介绍了一种使用Java动态代理机制创建代理对象的方法。通过定义接口并实现InvocationHandler接口的invoke方法,可以在运行时动态地为对象创建代理。具体步骤包括定义业务接口、实现业务接口、创建InvocationHandler实例并实现invoke方法,最后通过Proxy类获取代理对象。
1183

被折叠的 条评论
为什么被折叠?



