0
点赞
收藏
分享

微信扫一扫

excel中多行合并后调整行高并打印

草原小黄河 2024-01-27 阅读 13

 案例如下:

接口:

 实现类:

代理类: 

public class ProxyInvocationHandler implements InvocationHandler {


    //被代理的接口
    private Object target;

    public void setTarget(Object target) {
        this.target = target;
    }
    //InvocationHandler handler = new MyInvocationHandler(...);
    //Foo f = (Foo) Proxy.newProxyInstance(Foo.class.getClassLoader(), new Class<?>[] { Foo.class }, handler);

    //得到代理类
    //参数用了反射
    //第一个参数:类加载器(用来创建代理类)
    //第二个参数:公共接口(以租房为例的话,就是rent这个接口,也就是代理类要实现的业务)
    //第三个参数:invocationHandler,这里用this代替
    public Object getProxy(){
        return Proxy.newProxyInstance(this.getClass().getClassLoader(), target.getClass().getInterfaces(),this);
    }


    //处理代理实例,并返回各个方法的结果
    //代理实例新增的业务,放进这个方法中就可以被处理并返回
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

        //用来调用类中的方法(其本质是反射,当我们拿到代理类之后,要通过反射去调用原来公共接口的方法)
        //第一个参数:原来的公共接口
        //第二个参数:将原来的接口里的方法参数化了,我们可以理解成把参数名存进数组里依次调用
        Object result = method.invoke(target, args);
        log();
        return result;
    }

    //怎么给代理类新增业务,将写好的方法扔进invoke方法中即可
    public void log(){
        System.out.println("接口新增业务被调用");
    }
}

测试类: 

public class Client {
    public static void main(String[] args) {
        UserServiceImpl userService = new UserServiceImpl();

        ProxyInvocationHandler pih = new ProxyInvocationHandler();

        //创建一个等会要被代理的接口
        pih.setTarget(userService);
        //注意这里转型的是UserService接口而不是UserServiceImpl实现类
        UserService proxy = (UserService) pih.getProxy();

        proxy.add();
        proxy.delete();
    }
}

举报

相关推荐

0 条评论