java代理 InvocationHandler接口实现

来源:互联网 发布:js点击改变display 编辑:程序博客网 时间:2024/05/16 01:03

1 Person接口,人,在唱歌。

package com.myproxy;public interface Person {public void song();}


2 Person的实现类

package com.myproxy;public class PersonImpl implements Person {@Overridepublic 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;}@Overridepublic 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();}}


0 0
原创粉丝点击