您的位置:首页 > 编程语言 > Java开发

java代理 InvocationHandler接口实现

2015-11-04 09:00 453 查看
1 Person接口,人,在唱歌。

package com.myproxy;

public interface Person {
public void song();
}


2 Person的实现类

package com.myproxy;

public class PersonImpl implements Person {

@Override
public void song() {
System.out.println("person song!");
}

}


3 需要调用的方法

package com.myproxy;

public class Util {
public void dog() {
System.out.println("Dog song!");
}

public void cat() {
System.out.println("Cat song!");
}
}


4 实现InvocationHandler
package com.myproxy;

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

public class MyInvocationHandler implements InvocationHandler {
private Object target;

public void setTarget(Object target) {
this.target = target;
}

@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Util util = new Util();
util.cat();
Object invoke = method.invoke(target, args);
util.dog();
return invoke;
}

}


5 写一个获取代理对象的工厂

package com.myproxy;

import java.lang.reflect.Proxy;

public class ProxyFactory {

public Object getProxy(Object target) {
MyInvocationHandler h = new MyInvocationHandler();
h.setTarget(target);
return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), h);
}
}


6 测试

package com.myproxy;

public class TestProxy {
public static void main(String[] args) {
Person target = new PersonImpl();
ProxyFactory factory = new ProxyFactory();
Person person = (Person) factory.getProxy(target);
person.song();

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: